perm filename MONCOM.BH[S,DOC] blob sn#870343 filedate 1989-02-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00174 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00020 00002	STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                           March 1982
C00023 00003	                         1  INTRODUCTION FOR NEW USERS
C00024 00004	                        1.1  Introduction to Timesharing
C00033 00005	                         1.2  Timesharing at the AI Lab
C00045 00006	                         1.3  Introduction to Terminals
C00055 00007	                      1.4  Typing Commands to the Monitor
C00061 00008	                               1.5  File Storage
C00071 00009	                          1.6  LOGIN and KJOB Commands
C00074 00010	                             1.7  Editing Commands
C00079 00011	                1.8  Commands for Compiling and Running Programs
C00083 00012	                           1.9  Information Commands
C00086 00013	                         1.10  Programs and Core Images
C00090 00014	                              2  DISPLAY TERMINALS
C00092 00015	                           2.1  DD and III Keyboards
C00099 00016	                              2.2  The Line Editor
C00114 00017	                          2.3  Line Editor Activation
C00122 00018	                         2.4  ESCAPE and BREAK Commands
C00134 00019	                                2.5  The Wholine
C00150 00020	                           2.6  Page Printer Control
C00157 00021	                             2.7  Data Disc Control
C00159 00022	                               Virtual Terminals
C00165 00023	                                Keyboard Mapping
C00179 00024	                             Video Switch Commands
C00188 00025	                           Spying on Hidden Terminals
C00191 00026	                                2.8  III Control
C00193 00027	                           2.9  Audio Switch Control
C00199 00028	                       2.10  Individual Display Terminals
C00212 00029	                Supported Types of Individual Display Terminals
C00220 00030	                     Login Options for Individual Displays
C00230 00031	                       Special Notes on Various Displays
C00235 00032	            Display Terminal Capabilities Required for WAITS Support
C00238 00033	                            2.11  EDIT-key Displays
C00249 00034	                             2.12  NOEDIT Displays
C00253 00035	                     NORMAL mode for non-EDIT-key displays
C00262 00036	                      QUOTE mode for non-EDIT-key displays
C00271 00037	                               BUCKY-QUOTE modes
C00273 00038	                                ALL-QUOTE modes
C00276 00039	                                Switching modes
C00280 00040	                     Redefining the redefinable characters
C00283 00041	                          What QUOTE mode is good for
C00287 00042	                          2.13  Terminal Input Macros
C00297 00043	                            3  NON-DISPLAY TERMINALS
C00304 00044	                        3.1  Non-display ESCAPE commands
C00312 00045	                              3.2  The TTY Command
C00323 00046	                           4  BASIC MONITOR COMMANDS
C00324 00047	                             4.1  Running Programs
C00328 00048	                         4.2  Manipulating Core Images
C00335 00049	                             4.3  Starting Programs
C00340 00050	                               4.4  Detached Jobs
C00349 00051	                              4.5  Device Control
C00362 00052	                            4.6  System Information
C00371 00053	                          4.7  Miscellaneous Commands
C00380 00054	                           5  SYSTEM PROGRAM COMMANDS
C00382 00055	                                   5.1  LOGIN
C00417 00056	                                  5.2  LOGOUT
C00427 00057	                                   5.3  SNAIL
C00431 00058	                              5.4  COPY and SPOOL
C00435 00059	                                   5.5  MAIL
C00438 00060	                                   5.6  DART
C00440 00061	                                    5.7  DO
C00449 00062	                   Extended DO Features--the Brick Character
C00452 00063	                          Special Character Generation
C00454 00064	                          System Character Generation
C00455 00065	                         Activation Table Manipulation
C00456 00066	                          Brick Character Manipulation
C00457 00067	                                Typing Out Text
C00459 00068	                            Macro Variable Commands
C00461 00069	                            Output Control Commands
C00463 00070	                             Miscellaneous Commands
C00464 00071	                                   5.8  ZERO
C00467 00072	                                    5.9  WHO
C00474 00073	                                  WHO commands
C00490 00074	                                   5.10  FIND
C00492 00075	                              File to Be Searched
C00494 00076	                               What Gets Printed
C00499 00077	                             What Gets Searched For
C00503 00078	                         Putting The Results in a File
C00504 00079	                                The OMIT Clause
C00506 00080	                               The OFIND Command
C00508 00081	                                    Examples
C00512 00082	                               Using DFIND From E
C00515 00083	                                  Final Notes
C00517 00084	                                     EFIND
C00518 00085	                    5.11  Other System Information Programs
C00529 00086	                      5.12  Miscellaneous System Programs
C00543 00087	                             6  PRIVILEGED COMMANDS
C00555 00088	                                   A1  SNAIL
C00557 00089	                           A1.1  EDIT-Class Commands
C00566 00090	                          A1.2  COMPILE-Class Commands
C00568 00091	                   A1.3  DOCUMENT-Type COMPILE-Class Commands
C00570 00092	                   A1.4  LOADBUF-Type COMPILE-Class Commands
C00575 00093	                   A1.5  COMPILE-Type COMPILE-Class Commands
C00586 00094	                               More on File Names
C00588 00095	                                More on Switches
C00590 00096	                         Concatenation of Source Files
C00593 00097	                          Producing Symbolic Listings
C00597 00098	                      Generating Core Images and DMP Files
C00602 00099	                                Library Searches
C00605 00100	                          Alternate Processor Features
C00609 00101	                              Translator Switches
C00611 00102	                                Loader Switches
C00613 00103	                                 Command Files
C00616 00104	                               A1.6  CREF Command
C00617 00105	                      A1.7  SNAIL Switch Function Summary
C00621 00106	                   A1.8  LOADER Switches and LINK Equivalents
C00625 00107	                              A1.9  Error Messages
C00630 00108	                                    A2  COPY
C00631 00109	                                  A2.1  Syntax
C00634 00110	                            A2.2  General Operation
C00645 00111	                           A2.3  Device Peculiarities
C00651 00112	                                 A2.4  Switches
C00680 00113	                                Monitor Commands
C00683 00114	                                 A2.5  Examples
C00687 00115	                                   A3  SPOOL
C00699 00116	                                Delayed Listing
C00701 00117	                                 Page Selection
C00702 00118	                           Multiple Copies of a File
C00703 00119	                    A3.1  XSPOOL and DOVER Special Features
C00722 00120	                            A3.2  The QSPOOL Command
C00728 00121	                             A3.3  UNSPOOL Command
C00731 00122	                                    A4  MAIL
C00732 00123	                             A4.1  The MAIL program
C00739 00124	                              A4.2  Command Format
C00750 00125	                    A4.3  Destinations and Destination Lists
C00761 00126	                             A4.4  Message Formats
C00769 00127	                           A4.5  Message File Formats
C00772 00128	                             A4.6  Command Switches
C00789 00129	                             A4.7  Dates and Times
C00797 00130	                   A4.8  Wildcard Dates and Expiration Counts
C00800 00131	                       A4.9  Mail to Other Network Hosts
C00812 00132	                            A4.10  The MAIL Command
C00827 00133	                            A4.11  The SEND Command
C00832 00134	                           A4.12  The REMIND Command
C00835 00135	                            A4.13  The GRIPE Command
C00838 00136	                            A4.14  The EVENT Command
C00842 00137	                            A4.15  The PLAN Command
C00845 00138	                            A4.16  The NAME Command
C00846 00139	                            A4.17  The RETRY Command
C00848 00140	                            A4.18  The LATER Command
C00854 00141	                            A4.19  The BATCH Command
C00865 00142	                   A4.20  The REENTER Error Recovery Facility
C00870 00143	                            A4.21  Hand-Holding Mode
C00872 00144	                 A4.22  Interfacing to MAIL from Other Programs
C00882 00145	                           A4.23  The CANCEL Command
C00884 00146	                            A4.24  CKMAIL and CKSUM
C00887 00147	                             A4.25  The RCV Command
C00911 00148	                                    A5  DART
C00925 00149	                             A5.1  Dart Tape Format
C00930 00150	                         A5.2  Dart File Backup Policy
C00934 00151	                         A5.3  Privileged Dart Commands
C00936 00152	                                  A6  NETWORKS
C00943 00153	                             A6.1  The User Telnet
C00947 00154	                    A6.2  TELNET, DTN, OTN, DIAL and PTYJOB
C00950 00155	                  A6.3  Display Mode (Telnet, DIAL and PTYJOB)
C00954 00156	                      A6.4  Transparent Mode (Telnet only)
C00958 00157	                     A6.5  DTN: Datamedia Simulator Telnet
C00961 00158	                   A6.6  Commands to Telnet, DIAL, and PTYJOB
C00977 00159	                                  A6.7  SUPDUP
C00984 00160	                     A6.8  FTP: The File Transfer Protocol
C01009 00161	                          A6.9  Multiple File Transfer
C01025 00162	                         A6.10  One-line FTP transfers
C01031 00163	                        A7  CARE AND FEEDING OF DEVICES
C01032 00164	                                 A7.1  DECtapes
C01034 00165	                              A7.2  Magnetic Tapes
C01039 00166	                       A7.3  XGP: Xerox Graphics Printer
C01046 00167	                           A7.4  UDP: User Disk Pack
C01054 00168	                           A8  MONITOR ERROR MESSAGES
C01108 00169	                                A9  BIBLIOGRAPHY
C01115 00170	                            A10  WAITS CHARACTER SET
C01122 00171	                          A11  MONITOR COMMAND SUMMARY
C01125 00172	Command      Program      Arguments       Page Description (* means privileged)
C01145 00173	Commands that run programs:
C01151 00174	INDEX
C01192 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                           March 1982
OPERATING NOTE 54.7

                  M O N I T O R   C O M M A N D   M A N U A L
                                (Fifth Edition)


                                       by

                                  Brian Harvey


                                   edited by

                                  Martin Frost




ABSTRACT

This document describes the monitor commands available to users of the WAITS
timesharing system at the Stanford Artificial Intelligence Laboratory, and the
use of the terminals connected to this system.  The first section is an
introduction to the system for new users.  Several appendices are included
containing documentation of commonly used system programs.  This manual
supersedes SAILON 54.6.


The fourth edition of this manual was supported by the Advanced Research
Projects Agency of the Office of the Secretary of Defense under contract
MDA903-76-C-0206.     




ACKNOWLEDGMENTS

Several sections of this document were excerpted from program documentation
written by others.  Contributors include Mike Clancy, Mark Crispin, Bo Eross,
Martin Frost, Ralph Gorin, Dick Helliwell, Andy Moorer, Jeff Rubin, Jim Stein,
Dan Swinehart, and Don Woods.  John McCarthy wrote the Introduction to
Timesharing section.  This document was produced on the Xerox Graphics Printer
using the PUB program written by Larry Tesler and improved by Rich Johnsson,
Pitts Jarvis, and Tovar.
                         1  INTRODUCTION FOR NEW USERS


This manual describes the monitor commands used in the PDP-10 computer system at
the Stanford Artificial Intelligence Laboratory.  The first section is an
introduction for new users, including brief explanations of terminals, file
storage, and some of the essential monitor commands.  The computer is operated
exclusively as a timesharing system, and the section begins with an introduction
to timesharing.
                        1.1  Introduction to Timesharing


A timesharing computer system includes the computer itself (in our case a PDP-10
computer made by the Digital Equipment Corporation), user terminals for input to
and output from the computer (in our case about 60 keyboard and display
terminals), and a file system that keeps programs, data for the programs,
reports, and other data for the users.

The basic idea of timesharing is to allow each user to behave as though he had a
computer to himself controlled from his terminal.  This is accomplished by
having the computer cycle its attention among the users wanting service in
rotation.  It does this fast enough so that small requests are serviced in a
time that ranges from a small fraction of a second to a few seconds, depending
on the number of people demanding service at that instant.  If the desired
computation is long, the computer will do a bit of it, then service other
people, then return to it, and so on until the computation is done.  The time
taken will depend on the size of the computation and how busy the machine is.

At any time the user's terminal is interacting with some program.  These
programs include the timesharing monitor; editors used to prepare programs,
documents, reports and other data; various utility programs; and the user's own
programs.

When you first sit down at a terminal, you will be interacting with the monitor,
and you can always get back to the monitor by pressing the CALL key on the
terminal.  The first thing you have to do is to log in, which tells the monitor
who you are so it can connect you to the file directory that contains your files
and can do its accounting.  The last thing you do is log out so that the
terminal and other resources you have been occupying can be used by someone
else.

You will have a certain quota of disk space and will be able to keep files such
as programs between uses of the computer.  Therefore, you will not ordinarily
need any external form of storage such as punched cards or magnetic tape.  (Our
computer doesn't even have punched card equipment.)

A user gets service from programs by typing commands to the monitor.  Some
monitor commands perform the service and leave you again talking to the monitor.
Others cause a program to be started; thereafter, you have to interact with that
program in the way prescribed by it.  When you are done with it, you go back to
the monitor.

Your program also gets service from the monitor by means of special
instructions, called UUOs, used in the program.  The monitor provides many
different services as a sort of subroutine of your program; most importantly, it
is responsible for allocating resources, like core storage and input/output
devices, among different jobs.  Therefore, input and output must be done through
the monitor to avoid conflicts.  These UUOs are documented in their own manual;
this one is about the commands you type at your terminal.

A typical task is to write a program in some computer language such as SAIL (our
dialect of ALGOL) or LISP and then debug the program by running it, checking the
results, and changing it until it gives the right answers.  This is accomplished
in the following steps:

1.  First you run an editor.  (We have several, but the current favorite is
called E.)  The editor reads whatever you type and displays it; what you type
becomes the text of the program you are writing.  However, the editor gives you
convenient facilities for going back in your text and making changes that you
think of as you go along.  Most people don't write their programs on paper, but
make them up as they use the editor.  When the program is ready to try, you exit
from the editor back to the monitor, and your program is a file on the disk with
a name you have given it.  At any time, you can re-edit this file to make
changes in it.  You can also print it on the line printer to take a copy home,
and when you don't need it any more you can delete it.

2.  Normally, the next step is to call a compiler to translate the program from
a source language into machine language, call the loader to load it into your
core image, and finally ask the computer to run it.  You can do these things as
separate operations, but facilities are provided for initiating all of this with
a single command.

3. When the computer runs your program, it may just produce answers and stop.
If you like the answers, perhaps you are done.  Otherwise, you go back to the
editor to make changes in the source file and try again.  On the other hand, you
may have written an interactive program which expects you to type input on the
terminal.  It interprets your input and gives output, then asks for more input,
etc.  Your program may read files and write them.  It may display pictures on
your terminal.  Also, it may interact with the physical world by reading
pictures from one of the TV cameras attached to the computer and by waving the
mechanical arm.

4. In order to debug a program, you may have to do more than just look at the
output.  Therefore, the timesharing system has facilities for examining and
changing the contents of registers and for putting break-points in programs.
                         1.2  Timesharing at the AI Lab


Our timesharing system, called WAITS, runs on a Digital Equipment Corporation
(DEC) PDP-10 computer.  This is a 36-bit machine designed for timesharing
applications; the particular kind of PDP-10 we have is called a KL-10.  The
computer system itself is called SU-AI (for Stanford University Artificial
Intelligence Lab), or SAIL for "short".  We have 2,359,296 words of core storage
and 17,179,869,184 words of online system disk storage (plus many user disk
packs).  Our timesharing system, derived from old DEC software, has been
extensively modified for our special requirements.

Programming languages available here include SAIL, a version of ALGOL with added
features for backtracking, list processing, associative processing, and
coroutining; several versions of LISP; FAIL, our PDP-10 assembly language; and
the MICRO-PLANNER problem solving language.

To use the computer, you must type a LOGIN command at your terminal.  (See
Section 1.6 for a description of this command.)  The monitor assigns you a job
number, which it uses internally to keep track of you.  Associated with your job
are various resources, of which the most important is the core image, i.e., the
simulated core storage maintained for you by the monitor so that your program
can use addresses starting from zero although it may really be located anywhere
in core while running.  Your job only has one core image; if you type a monitor
command which causes a program to be run, that program replaces your old core
image.  There is no way for one job to run two programs at once.

As a user of the Stanford AI Lab system, you will be given a programmer name to
identify you to the computer.  The main reason for this is so that the monitor
knows which files on the disk storage belong to you.  This name will probably be
your initials.  When you log in, you must type in this name, along with a
project name which allows you to divide your files into separate groups for the
various projects you are working on.  For example, if you are doing homework for
a Computer Science course, the course number might be your project name.  The
combination is called a project-programmer name or PPN and is typed PRJ,PRG or
sometimes [PRJ,PRG] when used in a file specification.  It is possible to switch
your attention from one project to another without having to log out and log in
again by giving a monitor command to change your alias or disk PPN, the PPN used
for file access if you do not specify a file directory explicitly.  Therefore,
many users always log in using a single "master" project name; project "1" is
the conventional name for this purpose.

Ours is just about the most heavily used computer we know of.  It's hard to get
good service, especially weekday afternoons.  Therefore, please be careful about
leaving jobs logged in when you leave, and don't play games during the day!
Even a job which is not running uses up scarce resources.  The system will
automatically log out a job which has not run a program for ten minutes (twenty
minutes at night), if some scarce resource can be regained that way.  Potential
scarce resources include Data Disc channels, dialup phone lines, and job slots.
Even without a resource shortage, the system will automatically log out any job
that has been idle more than about two hours.  Autologout will happen even if
the job is waiting for the user to type something on the terminal.  For example,
if you are editing a file and have made changes which have not yet been written
on the disk, your changes will be lost if you are logged out automatically for
not running for a while.  A warning message is typed out five minutes before the
actual logout.  You can prevent autologout by typing the monitor command
ENABLE LIV which enables the LIV privilege, (see page 87), but it is antisocial
to do this routinely and it only affects your current core image (program); this
command exists for keeping a dead core image around while someone is poking at
it.  If you are logged in at a Data Disc (or dialup) terminal and there is a
shortage of Data Disc channels (or dialup lines), and if you would be eligible
for logout but have enabled LIV, then your job will be detached from your
terminal (see Section 4.4), so the job will stay around but your terminal will
be freed for other users.  Also, you can enable the DET privilege (ENABLE DET)
which will cause your job simply to be detached instead of logged out if there
is a terminal shortage but no job slot shortage when you have been idle.  The
DETACH option in LOGIN (see Section 5.1) can be used to enable the DET
privilege automatically when you log in.  Note: Autologout is applied first to
idle jobs that do not have disk files open for writing, but when that doesn't
free up enough resources, autologout is then applied to the remaining idle jobs.

Sometimes the system stops working while you are using it.  You will notice that
characters you type no longer appear on your terminal.  In many cases, the
system fixes itself after a few seconds, so all that happens is that a few
characters you typed are lost.  Otherwise, someone has to go fix it manually.
Sometimes it can be gotten to work again so that you can just continue with what
you were doing.  Other times, a new copy of the system is loaded and you have to
start over again.  This is called reloading.  If this happens, you will see a
message to that effect on your terminal.  When editing, it is a good idea to
save your file on the disk every so often in case the system crashes.  If the
system crashes and nobody is around to fix it, you may have to reload it
yourself.  Directions for how to reload are posted right next to the KL-10's
console terminal in the machine room; but the instructions there tell you to try
to find a wizard before doing anything yourself.  Also, often the system can be
"fixed" (instead of reloaded) by typing something simple on the console
terminal; see the instructions posted there and instructions typed out by the
system on the console.

Sometimes the system is stopped intentionally for software or hardware
maintenance.  This downtime is scheduled in advance, and part of the system
messages you see when you log in is a maintenance schedule.  Some time before
the system is taken down for scheduled maintenance, you will see a warning on
your terminal which counts down to the end.  This warns you to save any files
you are writing and stop what you are doing.  Such maintenance is often
scheduled between 5pm and 8pm weekday evenings.

This document, the Monitor Command Manual, describes the use of monitor commands
typed in at terminals.  Another manual describes the UUOs, instructions used by
programs to communicate with the monitor.  Other system information, including
documentation of specific system programs, can be found in some printed manuals
and on the disk; look at the [S,DOC] and [UP,DOC] file directories for program
documentation.  Some system programs which are invoked by special monitor
commands are written up in appendices to this manual.
                         1.3  Introduction to Terminals


A computer terminal has a typewriter-like keyboard and either a TV-like screen
or a typewriter-like printer and is used to communicate with the computer.  You
talk to the computer through the keyboard, and the computer responds by
outputting on a display screen or on paper.  When the output is done on paper,
we call the terminal a hardcopy terminal.  However, you'll probably be using a
display terminal, in which case a TV-like display screen is used for output
instead of a sheet of paper.  Almost all of the terminals connected to the SU-AI
computer are display terminals of a particular type, called Data Disc (or DD)
terminals.  There are also some IIIs ("triple-I's"), which use keyboards like
those on the Data Discs but with (old) vector displays instead of the TV
monitors of the Data Discs; the IIIs are used mainly for graphics display
programs like the drawing program.  In addition to these two types of displays,
the WAITS system supports certain other types of display terminals (e.g.,
Datamedia, Heath 19, Concept 100, etc.) to the extent of making efficient use of
their display screens.  Hereafter, the term display terminal will mean a
terminal of a type supported as a display by the WAITS system, namely a DD or
III terminal or one of the types of individual displays listed in Section 2.10.
All other types of terminals are considered "non-displays", whether or not they
use display screens for output!  Non-displays are sometimes called Teletypes,
for historical reasons, although the name is a trademark and should not be so
used.  Both "Teletype" and "console" are sometimes used to mean any terminal,
although "console" is more properly used to refer only to the computer's
operating console in the machine room and its associated terminal.

A vacant Data Disc or III terminal should say Take Me I'm Yours!  along with
some system information.  On a III, this information is the system wholine,
described on page 19.  On a Data Disc, besides the system wholine, there will
be a status display for all the jobs using the system.  If you find a Data Disc
or III that is completely blank, make sure that it's turned on, and that the
brightness and contrast (intensity on IIIs) are turned up.  If it says No Data
Disc Channels Left, it means that the Data Disc, which can run only 31 terminals
at once, is full.  A terminal that is not in use is called an available
terminal.  Please remember to log out when you are done using a terminal so that
it will become available to other users.

Each of the printing character keys on our Data Disc and III terminals has two
characters printed on it (except the 0 key).  The bottom one is usually a letter
or digit, and the top one is some special character.  To get the character shown
on the top of any key, hold down the TOP key while typing the given character's
key.  In addition to the TOP key, there are two SHIFT keys and a SHIFT LOCK key
which are used to make upper-case letters.  For example, hitting the "<D" key
alone produces lower case "d"; holding down SHIFT with that key produces capital
"D"; and holding down the TOP key makes it produce "<".  SHIFT has no effect
when TOP is used.

When you type something on an available terminal, the available message is
replaced by whatever you typed.  The characters you type are kept in a special
buffer called your line editor until you activate them by typing RETURN or one
of a few other special characters.  The line editor allows you to change the
contents of the line by using special editing command characters.  The
characters in the line editor are displayed on the screen with two cursors:
underlines on Data Discs and triangles on IIIs.  The left cursor is underneath
the first character in the line editor; the right cursor is under the place
where the next character you type will go (generally the end of the line).  When
your line editor is empty, the cursors coincide.  The line editor commands are
explained in Section 2.2.  Note: when you type RETURN, the monitor generally
supplies a LINE character automatically.  RETURN signifies a return to the left
margin, and LINE an advance to the next line.

To get started using DD terminals before you read about all the line editor
commands, all you need to remember is that the BS key will delete the last
character, and the CLEAR key will delete the entire line.  The CONTROL and META
keys are used for other line editor functions.

A note on terminology: In the body of this manual, characters are referred to by
the name printed on the DD keyboard, e.g., RETURN and FORM.  In other
documentation, including some of the appendices to this manual, different
notations are used.  Some of these are shown here:

    function           key         other notation

    break              BREAK       <BRK>  [BRK]
    escape             ESC         <ESC>  [ESC]  <ESCAPE>
    call               CALL        <CALL>  [CALL]  ↑C
    clear              CLEAR       [CLEAR]  ↑U
    tab                TAB         <TAB>  [TAB]  <HT>
    form feed          FORM        <FORM>  [FORM]  <FF>
    vertical tab       VT          <VT>
    backspace          BS          <BS>  [BS]  <RUBOUT>  <DEL>
    carriage return    RETURN      [RETURN]  <CR>  CR
    line feed          LINE        <LF>  LF  <LINEFEED>
    alt mode           ALT         <ALT>  <ALTMODE>  $
    shift              SHIFT       <SHIFT>
    top                TOP         <TOP>
    meta               META        <META>  β
    control            CONTROL     <CONTROL>  <CTRL>  α

The combination of RETURN and LINE (remember that LINE is supplied by the
monitor) is sometimes referred to as CRLF.
                      1.4  Typing Commands to the Monitor


What you type may be read by different programs at different times, so you
should be aware of what program you're talking to.  When you first type on a
vacant terminal, you are talking to the monitor's command decoder.  You continue
to talk to the monitor until you start running a program; then you're generally
talking to that program.  To distinguish these conditions, the state of the
terminal is described as monitor mode or user mode.  When the monitor is ready
to read a command from your terminal, it types a period (".").  Programs usually
type some special character(s) to prompt you when the are ready for a command;
many system programs prompt you with an asterisk ("*").

It is possible to type ahead when the system is not waiting for typein.
Characters you type which are not immediately read by either the monitor or a
program are stored in your terminal's input buffer until they are needed.
Programs can cause this buffer to be cleared.  For example, some programs ask
for confirmation of certain commands, e.g., when you specify for output a file
which already exists.  Some such programs clear your input buffer first and
others don't, so you can get confused by typing ahead to a program whose
behavior you don't know.  Your input buffer is also cleared when you type CALL.

Monitor commands consist of the command name, possibly followed by arguments
separated by spaces or punctuation, and then a RETURN.  The command may be typed
using upper and lower case letters interchangeably.  Monitor command names may
be typed in completely, or they may be abbreviated to only as many letters as
are necessary to make the name unique; for example, the LOAD command may be
abbreviated LOA, but not LO because there is also a LOGIN command.  A few common
commands have single-letter abbreviations (L is accepted to mean LOGIN).  Only
the first six letters of a command name are relevant.

Some monitor commands are completely processed by the monitor, without running a
program in your core image.  For example, the DAYTIME command types the current
date and time, without disturbing your core image.  Most commands, however,
require a program to be run.  The monitor usually requires you to log in before
you may run programs; there are a few exceptions, to permit system information
programs like WHO, and of course the LOGIN program itself.  If, when not logged
in, you try to run a program which requires you to be logged in, the monitor
automatically runs LOGIN, which will ask you for your project-programmer name.
In this situation, when LOGIN finishes running, it will re-enter the command
which you typed in the first place, so the command will be performed without
making you retype it.  Commands which require login but which refer to a
pre-existing core image rather than running a new program (e.g., START) do not
cause this automatic login, but give an error message.

When you first enter a command which runs a program, the system assigns you a
job number and types a line like

Job 19    SU-AI WAITS 9.13/M  Assembled 03/21/82

which tells you what version of the monitor is running and when it was created,
as well as your job number.  SU-AI is the name of the computer system (host),
and WAITS is the name of the timesharing system running here.  If the system
types

Job capacity exceeded

too many jobs are already logged in.  When a program like WHO is run without
logging in, the job is killed when the program exits or if the user types CALL.
The LOGIN program, however, leaves you logged in when it exits.

Some of the monitor commands are briefly described starting in Section 1.6.
The full descriptions of all the commands are in Sections 4 and 5, and in the
appendices.
                               1.5  File Storage


A file is a stored collection of information, perhaps a program or data.  Most
files are stored on a permanently available disk unit.  Files on the disk must
be identified by name and by owner so that you can get at the one you want.
Files on other devices may also be used; we have magnetic tape, DECtape (a small
mag tape unit unique to Digital Equipment Corporation machines), and paper tape,
as well as printers and various exotic special devices.  Whenever a program does
input or output, it has to specify the particular file it wants.  A file
identifier is typed in the form

DEV:FILNAM.EXT[PRJ,PRG]

some parts of which can be left out.  DEV specifies the device you want.
Generally, if you want the disk (DSK), you may leave out the device name.  If
you leave out the device name, leave out the colon too.  Device names may
include a number to specify a particular unit; thus, TTY is your own terminal
(all terminals used to be Teletypes, and the name stuck), but TTY30 is the one
next to the vending machine.  Besides these physical device names, you can
define logical device names to use in your program.  The monitor command ASSIGN
is used to make your logical name refer to some particular physical device.

Some devices, like the disk, require the use of filenames, and some, like the
terminal, don't.  If you specify a filename for a device which doesn't use one,
the name is ignored.  Devices which require file names are called directory
devices because they include special files called directories which tell where
the other files are.  Files are specified by a filename, another name called the
extension, and, on the disk, a PPN specifying the file's owner.  Letters in the
filename are upper case, although most programs will accept lower case letters.
The filename is one to six letters or digits, and can say anything you want to
identify the file.  The extension, which is optional, is one to three
characters.  Although the monitor allows any SIXBIT characters (the ones with
octal ASCII codes between 40 and 137--see Appendix 10) to be used in filenames
and extensions, some programs which read filenames use some punctuation
characters as punctuation characters and won't recognize them in filenames.  It
is best to stick to letters and digits.  If you find that some program has
written a file called @# $!.X ? in your directory and you are having trouble
dealing with it, you will find that several programs, including the COPY program
for file manipulation, use the notation ↓...↓ for such files, allowing any
SIXBIT characters between the downarrows as part of a filename.  (You must, of
course, say ↓FILNAM↓.↓EXT↓ if that's what you want, not ↓FILNAM.EXT↓.)  The only
directory devices in this system are the disk, UDPs (User Disk Packs), and
DECtapes.

The extension of a file is generally one of a standard set used to indicate what
sort of file it is, like SAI for a SAIL program, REL for a relocatable binary
program as produced by a compiler, or DMP for a dumped core image.  Many
programs use these standard extensions as defaults, so you often can type the
file name alone.

Disk files require a project-programmer name, which selects the directory to use
for the file (see page 5).  If you do not type in a PPN, you generally get the
one you gave to LOGIN, although you can change this default with the ALIAS
command.  The disk directory for each PPN is called a UFD (User File Directory);
the files in a given directory are also said to comprise a disk area, although
there is not really a physical area involved.

Files are divided into smaller units, called records.  The precise meaning of a
record depends on the particular device you are using, but often a record is the
smallest unit of data which the device will transfer to or from the computer at
a time.  For example, files on the disk are divided into 200-word (octal)
records.  The disk hardware reads or writes one such record at a time.  On
magnetic tape, you can write any size records; however, when you read the tape,
each record must be read all at once.  The monitor provides buffering so that
your program can deal with the data a character or a word at a time.  The
monitor gets a record and stores it for you.

The following devices are available on this system.

  DSK      the public disk
  SYS      same as DSK, but implies PPN [1,3] (system files)
  UDP1,2   user disk pack, a disk unit for private disk packs
  MTA0,1   magnetic tape drives
  DTA1-4   DECtape drives
  XGP      Xerox Graphics Printer
  VRN      Varian plotter/printer
  IMP      Interface Message Processor for ARPA network connections
  PUP      Ethernet protocol device for SUNet connections
  DLN0-2   Dialnet ports
  PTR      paper tape reader
  PTP      paper tape punch
  ELF      PDP-11 computer, used to control robotics devices
  ARM      Robotics arm interlock
  GRN      Grinnell display processor interlock
  TV       TV cameras
  CAR      cart transmitter
  TTYn     terminals and pseudo-teletypes (see below)
  TTY      the user's own terminal
  CTY      PDP-10 console terminal
  NUL      null device, ignores output, gives end-of-file on input

A pseudo-teletype (PTY) is a simulated terminal-like device used to allow
programs to "type" monitor commands.  The program uses special UUOs to output
text to the PTY, which is then seen by the monitor as if it were typed at
another terminal, with its own TTY number.  Similarly, text typed out to the PTY
can be read by the controlling program.  One user of PTYs is the program which
allows people at other computers to use our system via a network.

Disk files are copied to magnetic tape daily, using the DART program (see
Appendix 5).  Monitor commands which run DART can be used to retrieve files
which have been clobbered by system failure (uncommon) or user error.
                          1.6  LOGIN and KJOB Commands


In this and the following sections, a few of the monitor commands used in
creating and debugging a program are described briefly.  More complete
descriptions come later and in other manuals.

The first thing you have to do is log in.  The command for this is called LOGIN,
abbreviated L.  Your project-programmer name is its argument.  (See page 5 for
an explanation of project-programmer names.)  Most users use project name 1 when
they log in; to do this you simply give your programmer name as the argument.
If you are named V. I. Lenin, you might type

L VIL

which means the same thing as

L 1/VIL

(The slash means that you don't want to see any system messages which you've
seen before.  You could have used a comma to see all messages or a period to see
none at all.)  The monitor processes this command by assigning and typing out a
job number, and then starting the LOGIN program in your core image.  LOGIN will
ask for your password, and after you give that, it may type some system messages
before it finally exits.  You are now logged in.  Section 5.1 explains the
LOGIN command more fully, including lots of automatic options that you can
select from.

When you finish doing whatever you want, you should log out.  The command for
this is called KJOB, abbreviated K.  No arguments are required, just K and
RETURN.  (As with all monitor commands, your terminal must be in monitor mode
when the command is given.)  This command runs the LOGOUT program, which types
out how much computer time you used, etc., and kills your job.  Your terminal
will become available in a few seconds if you don't type anything else.  Section
5.2 gives more complete documentation of the logout procedure.
                             1.7  Editing Commands


To enter your program, or to correct it, you will use one of our text editors.
There are three editors in common use here:

1.  E.  This is the one you'll generally use.  It is a fast display editor with
many diversified features.  It is sometimes incorrectly called ETV after the
monitor command by which it is invoked.

2.  SOS.  This editor is designed for use at non-display terminals.  Files
created with SOS include a line number at the beginning of every line.  Editing
commands use the line numbers to specify what lines to change, delete, or
whatever.  Hopefully you will have no need to use this editor, since you'll be
using display terminals.

3.  TECO.  This editor is the XTEC version of a standard editor supplied by DEC.
It is extremely powerful, in that it allows you to write editing programs which
can process a file systematically, and it is very flexible about strange
characters in the file.  However, for routine editing it is somewhat
inconvenient to use because it does not use the display facility of the
terminals.

Each of these editors is described in its own manual.  A bibliography is
included as an appendix to this manual.  The point to be explained here is how
to use monitor commands to invoke an editor; we'll assume here that you're using
E.

Suppose you want to write a program called PROG in the SAIL programming
language.  The monitor command to create a new file with E is CETV.  So you
would type

CETV PROG.SAI

(SAI is the standard extension for SAIL programs.)  This command tells the
monitor to run E, and tells E to create a new file named PROG.SAI.  E remembers
the last editing command you typed, so later you'll be able to edit the file
simply by entering an ETV command without having to type the file name again.
(Note--LOGOUT normally makes E "forget" your commands, so you have to type the
file name again when you next log in.)

The command for editing an already existing file with E is ETV.  You can enter
this command with no argument and it will remember the file from the last edit
command, or you can specify a filename as with the CETV command above.

The other editors (SOS and TECO) do not read monitor commands themselves.
Instead, the corresponding monitor commands for those editors are interpreted by
the SNAIL program, which then starts the appropriate editor.  Later in this
manual the ETV and CETV commands will be referred to as "SNAIL commands" even
though they do not actually run SNAIL, since they carry out SNAIL-like
functions.

There is a file you can edit to learn how to use E.  To do this, log in and
enter the following command:

HELP ETEACH

Then just read what appears on your screen and follow instructions.  This
command creates a file which you may want to delete when you are done.
                1.8  Commands for Compiling and Running Programs


Once you have typed in your program, you have to compile it, load it, and run
it.  Compilers like SAIL put out relocatable binary programs.  This means that
the program is in a form which contains enough information so that it can be
loaded into any address in core.  Addresses within the program are all
considered relative to the program's first word, so the LOADER has to add the
actual address of that word to all the relative addresses in the program.  Your
program can be loaded along with others, for example a debugging program; the
actual location of any program in your core image will depend on what other
programs are loaded with it.  (Note that this relocatable binary program format
has nothing to do with the hardware relocation discussed on page 5.)  The core
image produced by the LOADER can be saved in a DMP (dump) file, which can then
be run directly by a monitor command without going through the LOADER again.

Suppose you have typed in your program, PROG.SAI.  You want to compile, load,
and run it.  You could say

EXECUTE PROG

and all those things would happen automatically.  SNAIL would generate a command
file for SAIL telling it to compile PROG.SAI and start up the loader, which also
gets a command file.  (SNAIL knows that it should use the SAIL compiler because
of the SAI extension in your filename.)  Again, SNAIL remembers the command, so
next time you just have to say EXECUTE and it'll all happen.  In fact, the
editors all have commands which automatically re-do the last compile-type SNAIL
command.

Suppose, to make this clearer, you find a bug in the program.  To fix it, you
can give the monitor command

ETV

and E will start editing PROG.SAI.

Then you use E commands to edit the file.  When you're done, you use the
exit-to-SNAIL command, which in E is CONTROL-X GO.  This will automatically
repeat the EXECUTE command you typed before.

There are many different versions of this compilation command: COMPILE will just
compile the program, LOAD will compile and load, etc.  The SNAIL commands are
listed in Section 5.3 and fully described in Appendix 1.
                           1.9  Information Commands


You can sometimes find out how to use a system command by typing HELP followed
by the command name.  Typing HELP with no argument will list the kinds of help
available this way.  For instance, if you forget how to log in, you can type
HELP LOGIN.

More complete program documentation is accessible through the READ command,
which takes a name as its argument, like HELP, and starts the E editor reading a
file with that name in the documentation directories, if any.  This is most
useful from a display terminal, since E is a display-oriented editor.  The
command READ HOW will edit the HOW file, which provides introductions on the use
of many system programs.

To get a list of the files in your directory, type the DIRECTORY command.  You
can get the list for another disk area by including a PPN in square brackets as
an argument.  For more details, see Appendix 2, specifically the DIRECTORY
command on page 113.

For examining your directory from a display, you can use the DIRED program, run
by the DRD command.  This is a very useful program for displaying and
manipulating file directories.  The basic commands of DIRED are the same as in
the E editor, although not everything is identical, simply because of
differences between directories and files.  See the file DIRED.DON[UP,DOC] for
details on DIRED.

You can see the status of all the jobs on the system with the WHO command,
abbreviated W.  You can find out about jobs belonging to a particular user by
typing WHERE prg (prg is the programmer name) or FINGER prg.  These type out
information about the given user's jobs; try them to find out more.  All of
these commands run programs in your core image, so you shouldn't run them if you
need the program you have there.

These information commands can be run without logging in first, except for READ.
                         1.10  Programs and Core Images


This section discusses the allocation and use of core storage for a job.  The
PDP-10 storage is divided into pages of 512 words each.  Currently, pages are
always allocated in pairs; thus a job's core image is an even number of pages in
size.  A job's core image may be located in any set of actual core pages while
the program is running.

Actually, a job may use two distinct sets of core pages, called the lower and
upper segments.  The job must have a lower segment in order to run.  This
segment belongs to that job alone.  If the job has an upper segment, it may be
shared with other jobs.  One use of this is to allow several users to run the
same system program with only one copy of the program in core; the data for the
individual users is stored in each job's lower segment, and the common code is
in the upper segment.

An upper segment may be write protected, so the program in it cannot be
accidentally changed.  This is usually done with shared upper segments.
Programs can control the write protection of their upper segment by UUO.  Upper
segments are more fully explained in the UUO Manual.

Each upper segment has an entry in the system job table, including a job number,
a segment name, and much of the status information associated with jobs.  Some
of the monitor commands described in later sections of this manual refer to
upper segments.

The lowest locations in each lower segment, called the Job Data Area, are used
by the monitor to store information about the job.  Some of this information is
of interest only to the monitor, while other parts can be used and modified by
the job itself.  In particular, some monitor commands use information from Job
Data Area words, e.g., starting addresses for the program.  The description of
such commands will refer to the relevant word by its symbolic name, of the form
JOBxxx, e.g., JOBSA is the word containing the program's normal starting
address.  The complete description of the Job Data Area is contained in the UUO
Manual.
                              2  DISPLAY TERMINALS


A display terminal is one which uses a TV-like screen, rather than a sheet of
paper, as its output medium.  However, in this document (and in general around
SU-AI), the term "display terminal" will be used to refer specifically to the
special kinds of display terminals for which special services are provided by
the WAITS operating system.  These include the Data Disc and III terminals at
the laboratory, as well as certain other terminals that WAITS knows how to
handle (e.g., Datamedia, Heath 19, Concept 100).  These addition types of
display terminals are discussed in Section 2.10; for now we consider only the
Data Discs and IIIs.

The Data Discs and IIIs ("triple-I") use the same keyboards, but have different
display screens.  The Data Discs, which are more numerous (about 60 of them),
use TV monitors.  (The name Data Disc actually refers not to the terminals
themselves, but to the machine in the computer room which controls them.)  The
IIIs are vector plotting displays, used mainly for graphics display programs.
                           2.1  DD and III Keyboards


Our display terminals use a character set called WAITS ASCII (formerly called
Stanford ASCII).  ASCII is a standard computer character set; our version is
similar to the standard but somewhat extended.  In particular, the "control"
codes in ASCII, which mean things like "end of text," are used here for printing
characters like α and ∃ and ∩.  There are seven bits in a character code; since
the PDP-10 has 36-bit words, five characters fit in a word with one bit left
over.  The complete WAITS ASCII character set is listed in Appendix 10.

Each of the printing character keys on our terminals has two characters printed
on it (except the 0 key).  The bottom one is usually a letter or digit, and the
top one is some special character.  There are two SHIFT keys and a SHIFT LOCK
key, which make letters upper case.  The keys which produce the special
characters are labelled TOP.  For example, hitting the "<D" key alone produces
lower case "d"; also holding down SHIFT produces capital "D"; and holding down
the TOP key with it produces "<".  SHIFT is ignored when TOP is used.

There are several special character codes, generally not printing characters,
which are not affected by SHIFT and TOP.  One is the space bar, which spaces as
on any typewriter.  The TAB key sends a tab code, which prints by spacing out to
the next tab stop; these are set eight spaces apart and cannot be changed.  The
RETURN key sends a carriage return code, and the monitor generally provides a
line feed code after it automatically.  The LINE key sends a line feed alone;
this is not too often useful.  The FORM key sends a form feed code, and the VT
key a vertical tab.  These two are used by some programs as control codes, but
not often for their printing effect.  The BS key is backspace (in real ASCII
this code is called delete).  This code is usually not sent to your program, but
is taken by the line editor as a command to back up the cursor.  The ALT key
sends an alt mode; this code has no printing significance, but is used as a
control code by programs.

Although ASCII is a seven-bit code, display terminals actually send nine-bit
codes to programs.  The two extra bits represent the CONTROL and META keys.
These keys are like SHIFT and TOP in that they are held down along with some
other key.  The CONTROL and META bits are sometimes called "bucky bits", and the
two combined are called "double bucky".  The bits have two different functions.
When the character they are used with is sent to a program, it can be used as a
control command.  Editing and debugging programs use such single-character
commands heavily.  For example, in the E editor, CONTROL-META-D means to delete
a line.  However, the CONTROL and META keys are also used in commands to the
system line editor, e.g., for inserting characters inside a line, etc.  The use
of the line editor is explained in Section 2.2.

There are four more keys to be described.  They are unusual in that none of them
send characters to your program or to the monitor's command decoder; they are
processed by the monitor's keyboard scanner and the line editor.  CLEAR is
simply a line editor command to delete the entire line in the line editor.  CALL
is used to stop a program running in your core image and return your terminal to
monitor mode.  ESC (escape) and BREAK are used to signal that the characters
which follow are a special command to the monitor; the many different functions
of these commands will be explained in Section 2.4 and following sections.
There should be a list of the ESC and BREAK commands attached to your keyboard;
if not, see page 18 to find out how to print one.

Please note that the ESC and BREAK keys generate codes by themselves; they are
not shift-like keys as CONTROL and META are.  Thus, for example, CONTROL-A means
"press the A key while holding down CONTROL," whereas ESC A means "press ESC and
then press A."  Also, the ASCII character which is represented on our keyboards
as ALT is sometimes called "escape" (the name was changed a few years ago;
another name for the same function is "prefix") and is produced by a key marked
ESC on some other computer terminals, but our ESC is not one of the ASCII codes
and should not be typed when ALT is wanted.
                              2.2  The Line Editor


At a display, the characters you type are accumulated by a part of the monitor
called the line editor.  When you end a line by typing an activation character,
the entire line is sent to your program (or to the monitor command decoder).
Generally you will activate a line with the RETURN key, although others also
work.  The exact workings of activation are discussed in Section 2.3, but
first, there are several editing command characters which can be used to change
the text in the line editor.

There are two line editor cursors displayed on your screen.  The left cursor is
underneath the first character in the line editor and is called the line cursor.
The right cursor is under the character position you are about to write into and
is called the character cursor.  The cursors are underlines on Data Discs, and
triangles on IIIs.  Also, on IIIs, the characters in the line editor are
displayed somewhat below any other characters on the same line.  If there is no
text in the line editor, the two cursors coincide.

On Data Disc terminals, when there is no text in the line editor, you will
sometimes see a "broken" cursor consisting of two very short lines.  This means
that the program you are running is waiting for a single character to be typed,
rather than an entire line.  The reason for this display is that many programs
ask you yes-or-no questions, and some of them expect you to type, e.g., Y
followed by RETURN while others just wait for the Y.  The broken cursor warns
you that a RETURN is not expected.  However, it is possible for programs to wait
for a single character in sneaky ways which do not cause a broken cursor, so the
warning is not perfectly reliable.

When you type a normal character into the line editor, it is displayed at the
character-cursor position, replacing any other character which was there before.
The CONTROL and META keys are used to change the function of characters typed
in.  Also, several characters have different functions depending on whether or
not they are typed with the character cursor at the end of the line.  For
example, BS at the end of the line deletes the last character; inside the line,
it moves the cursor left one position without deleting anything.

As explained below, some characters with CONTROL or META bits are normally
interpreted as line editor commands.  These commands may only be meaningful
under certain conditions; for example, a command to space forward into the line
is not meaningful if the cursor is already at the end of the line.  CONTROL or
META characters which are not meaningful line editor commands can be used as
commands to user programs (in which case they are activation characters); they
can be treated as if they had been typed without the CONTROL or META bit; or
they can be ignored altogether.  The choice is made by the user program, which
can also disable some or all line editor commands.  This flexibility makes it a
bit complicated to describe exactly what happens in each case (we make an
attempt in the next section), but in general programs are written so that the
"right" thing happens.  Roughly, in monitor mode, control characters which are
not line editor commands are treated as if typed with META, i.e., inserted into
the line; when typing to a user program, they generally activate.  For the rest
of this section, we ignore the question of CONTROL or META characters which are
not taken as line editor commands, and simply deal with the ones which are.

META along with a printing character (including space and tab) inserts that
character at the cursor position, in front of the character already there,
rather than replacing the old character.  META characters are considered
meaningful line editor commands only when not at the end of the line.

BS at the end of the line deletes the last character.  If it's not at the end,
BS just backs up the cursor without deleting.  People talk about deleting
backspace and non-deleting backspace to distinguish these.  CONTROL-BS is always
non-deleting, and META-BS is always deleting.

CONTROL-SPACE is the opposite of CONTROL-BS: it moves the cursor forward without
changing the text.  SPACE alone and META-SPACE act like any printing character.
At the end of the line, CONTROL-SPACE usually does nothing (it neither moves the
cursor nor activates).

CONTROL-META-SPACE and CONTROL-META-BS are unlike all other characters typed in
this system in that they are "repeating" commands: they move the cursor forward
and backward, like CONTROL-SPACE and CONTROL-BS, but continue moving the cursor
as long as you hold down the keys.  No other CONTROL-META characters are line
editor commands.

CONTROL-TAB moves the cursor to the end of the line, as if you typed
CONTROL-SPACE many times.  (Inside the line only.)

CONTROL-FORM is the opposite: it moves the cursor to the beginning of the line,
so the two cursors coincide.  (Inside or end of the line is okay for this one.)

CONTROL-D deletes the character above the character cursor.  (Inside only.) 
Note that this is different from META-BS, which deletes the character to the
left of the cursor.

CONTROL-S skips ahead from the current position of the character cursor to the
next occurrence of the character you type next.  If the next character you type
does not occur to the right of the cursor, nothing happens.  If the search
character is a letter, the case must match.  If the character you type next is
RETURN, the cursor moves to the end of the line.  (Inside only.)

CONTROL-K is like CONTROL-S but instead of moving the cursor it kills characters
up to (not including) the one you select.  Again, nothing happens if the
character does not occur.  If the character you type after CONTROL-K is RETURN,
all the characters from the cursor to the end of the line are deleted.  (Inside
only.)

CONTROL-B searches for the character you type next, like CONTROL-S, but searches
backwards (toward the beginning of the line).  It is normally accepted as
meaningful anywhere except on an empty line.

CONTROL-L kills backwards, like CONTROL-K, but toward the beginning of the line.
Meaningful except on an empty line.

CONTROL-R repeats the last search or kill command given.  It does not wait for
you to type another character, since it remembers the argument from the previous
search or kill command.  This works even if the line editor has been activated
since the last search or kill.  This is a meaningful command except on an empty
line.

CONTROL-I enters insert mode.  In this mode, normal characters typed are
inserted instead of overwriting old ones, and BS is a deleting backspace.  You
could get essentially this same effect by holding down the META key with every
character you type.  You can get out of insert mode by typing another CONTROL
command (except CONTROL-T) or any META-character (except META-BS).  (Inside
only.)

CONTROL-number (that is, any decimal number typed while holding down the CONTROL
key) will cause a CONTROL command immediately following to be repeated that many
times.  For example, CONTROL-5 CONTROL-BS will move the cursor left five
positions.  This can be used to repeat the BS command as well as CONTROL-BS,
META-BS, CONTROL-SPACE, CONTROL-D, CONTROL-S (finds the nth occurrence),
CONTROL-K, CONTROL-B, CONTROL-L, and CONTROL-R.

CLEAR will delete everything in the line editor.

CONTROL-RETURN will retrieve the last line which was edited, as long as you
haven't typed anything since then.  That is, after you activate or CLEAR a line,
if the very next character you type is CONTROL-RETURN, the line is returned to
the line editor.  You can send the same line again by just typing RETURN, or you
can edit it.  This is very handy when a monitor command, for example, fails
because of a spelling error; you can simply say CONTROL-RETURN, correct the
error, and say RETURN to activate the corrected command.  Typing CALL or an
ESCAPE or BREAK command (see Section 2.4) will not prevent a later
CONTROL-RETURN, but any character which is entered into the line editor will
make it forget the previous line.

CONTROL-T transposes the two characters to the left of the cursor.  This is
often convenient for bad typists.  It is normally considered meaningful except
on an empty line, although it has no effect if there are not at least two
characters to the left of the cursor.  Unlike most line editor commands, this
doesn't get you out of insert mode.

The TAB character is treated in a special way by the line editor.  Commands like
CONTROL-SPACE treat a TAB as a single character, so a CONTROL-SPACE when the
cursor points to a TAB will move several spaces to the right.  Typing a
character without control bits, however, only replaces the first space of the
TAB.  There will still be a TAB in the buffer, unless the TAB was positioned so
that it was only equivalent to one space, in which case it goes away completely
when another character is typed over it.
                          2.3  Line Editor Activation


This section is about the workings of line editor activation: how the line
editor decides to release characters to your terminal input buffer.  Normally,
the characters you type are accumulated in the line editor buffer until you type
an activation character, which tells the monitor to send the line you have typed
into your input buffer.  The standard activation characters are just RETURN,
LINE, and ALT.  (Note: a RETURN typed by the user is automatically translated
into a RETURN plus a LINE, and it is the LINE which is the real activation
character.)  User programs can specify additional activation characters by using
the SETACT UUO.

Those CONTROL or META characters which are not meaningful line editor commands
may be activation characters, at the option of the user program.  Alternatively,
they may be treated as ordinary characters to be inserted as if typed with META
but without CONTROL.  There are two main categories to consider, those control
characters which are line editor commands but not meaningful as such in the
present context, and those which are never line editor commands.

In monitor mode (while typing monitor commands), the rules are always the same:
all line editor commands are enabled; a line editor command which is not
meaningful in the present context (e.g., at the end of a line) has no effect
(note that, e.g., CONTROL-S will "absorb" the following character even in this
case); and control characters which are not line editor commands are treated as
if typed with META, i.e., they are inserted into the line.

The processing chosen by user programs will depend on whether or not they use
control characters as commands.  The default processing is to consider all
control characters as activators unless they are line editor commands.  All
possible line editor commands are considered meaningful (i.e., don't activate)
except at the end of the line, where CONTROL-D, CONTROL-I, CONTROL-S, CONTROL-K,
CONTROL-TAB, and META-anything activate.  If the line is empty, CONTROL-B,
CONTROL-L, CONTROL-T, and CONTROL-R also activate.  (The phrase "control
characters" include those with the META bit as well as those with the CONTROL
bit.)  The program may, however, suppress activation of some or all control
characters, or suppress the effect of some or all line editor commands.  User
program documentation should indicate which control characters, if any, are used
specially by that program.  The SETACT UUO is used to control the processing of
these characters.  If the user program enables 7-bit characters other than
RETURN, LINE, and ALT as line activators, then your terminal is said to be in
special activation mode.  Otherwise it is in normal activation mode.  The
program can also disable the CONTROL-RETURN function.  Also, programs can choose
to activate on any character at all.

The RETURN character is treated specially by the line editor: the cursor is
moved to the end of the line before the RETURN is inserted.  Therefore typing
RETURN always activates the entire contents of the line editor.  (Note: this is
true only of a RETURN typed without control bits; also, a RETURN typed while in
insert mode is treated like a META-RETURN and therefore is not moved to the end
of the line.)  This special handling of RETURN, the most common activator, makes
it convenient to modify something inside the line and then activate it without
worrying about getting to the end of the line first.

When you type an activation character other than a bare RETURN, the characters
up to and including the activator are available for input to the user program or
the monitor command scanner.  Any characters following the activator remain in
the line editor.  (This behavior is also subject to user program control via the
SETACT UUO.)  The activator is inserted in the line; it does not overwrite the
character which was at the cursor position before typing it.

If the activation character is a RETURN with control bits, what the program sees
is not a RETURN with control bits, but a bare RETURN followed by a LINE with the
corresponding bits.  (The system always adds a LINE when you type RETURN; what
is special about this case is that the control bits are moved to the LINE.)  In
particular, the code 612 (CONTROL-META-LINE) should not be interpreted by
programs as an end-of-file code if it is preceded by a 015 (RETURN).

When you re-edit with CONTROL-RETURN a line which was activated by a character
other than RETURN or LINE (either an ALT or a special activation character
established by the user program), the original activation character appears in
the line (with its control bits removed), and if the line is then activated by
typing RETURN, the RETURN is not actually inserted in the buffer; the original
activation character is re-used.  Any control bits on the RETURN are put on the
re-used original activation character.
                         2.4  ESCAPE and BREAK Commands


Certain special characters are used to control the status of your display
terminal.  These are processed directly by the monitor's keyboard scanner,
whether or not you are in monitor mode.  One example, mentioned above, is CALL.
This key stops your program, if one is running, and returns you to monitor mode.
You can also type CONTROL-CALL or META-CALL for a deferred call--the program is
stopped when it tries to read the CALL character from your input buffer.  Thus
you can type some commands into a program, followed by a deferred call; when the
program is finished with your commands and asks for more, it will be stopped.

There are several commands using the ESC and BREAK keys.  Generally, the format
is ESC or BREAK, then possibly a numeric argument, then a letter or punctuation
character which specifies the command.  The characters making up the command are
not echoed and are not entered into the line editor; typing BS while entering an
escape command aborts the entire command.  A BREAK command is equivalent to an
ESC command with a negative argument, e.g., BREAK 3 W is the same as ESC - 3 W.
There should be a concise summary of these commands attached to your keyboard;
if not, log in and type this:

HELP DDKEY

(or IIIKEY instead of DDKEY if you are using a III terminal) to print the list
on the XGP.

In the descriptions which follow, upper case letters and punctuation characters
represent keys to be typed, e.g., ESC is the ESC key, and characters like [ and
* are to be typed as indicated.  Spaces in the manual separate the keys to be
typed, and do not represent actual spaces to be typed, which would be indicated
as SPACE.  Thus, E S C represents three keystrokes.  Lower case letters
represent parameters to the commands, so ESC n W means to type the ESC key, then
a number (one or more digits), and then the W key.  Letters may be typed in
upper or lower case.  Parameters are almost always numbers before the command
letter, as in the last example, but a few commands allow a programmer name as a
parameter, using the syntax ESC [ prg CONTROL-letter where the final letter with
CONTROL key indicates the command name.

ESC O will stop typeout from your program.  Any characters already in your
output buffer are deleted, and any attempted typeout from your program is
ignored.  The program continues running, however.  Typeout is resumed if you
type BREAK O, or if your program tries to read any characters from your
terminal.

It is possible to suspend typeout from your program temporarily without losing
output, as with ESC O.  Typing CONTROL-BREAK starts this holding.  The word
HOLDING appears at the top of your screen, and the program is stopped if it
tries to type more characters than fit in your output buffer.  Holding is
released by typing CONTROL-CLEAR or any line editor activation character.  (The
command ESC  CONTROL-<minus-sign> also starts holding, this form of the command
being especially useful on displays without the special WAITS keyboard; however,
there are other special commands for holding on such terminals.)

Display terminals are usually in full character set mode, which means you type
in upper and lower case letters normally.  You can leave this mode by typing
BREAK F, which causes the case of each letter typed in to be inverted.  This
allows you to easily type in mostly upper case text that contains an occasional
lower case letter; use SHIFT only with the desired lower case letter (sic) and
the rest will be in upper case.  You type ESC F to return to full character set
mode.  On a non-display not in full character set mode, all characters typed in
or out are always forced to be upper case.

The system includes facilities which allow users to see what other users are
doing by "spying" on other terminals.  The ESC H command will hide your
terminal, notifying other users that you do not want to be observed.  Please
note that it is still possible, although considered rude, to override this
protection.  BREAK H "unhides" your terminal.

There is a FILES command which can be typed when in monitor mode, to list the
files in use by your job.  So that this information can be seen without having
to stop your user program, typing ESC V will type out this file information.
ESC n V will type out the files in use by job number n, and BREAK n V will type
out the same information for the job controlled by terminal number n.  See page
52 for details on what is typed by the FILES command.

Some programs which read data from your terminal expect an "end of file"
indication after the data.  The thing to type to supply this signal is
CONTROL-META-LINE.

Sometimes you may want to write a program which you can interrupt with a signal
from your keyboard, without having to keep checking for terminal input in the
program.  For example, if you run a program which searches a large data base by
command, you may want to be able to abort a search without stopping the program.
Typing ESC I or BREAK I will generate an interrupt condition which your program
may enable; the use of program interrupts is described in the UUO Manual.  You
may type a numeric argument with ESC I or BREAK I; the user program is given the
number you type and is told whether you used ESC or BREAK.

If you want to repeat the same escape command several times, but possibly with a
different numeric argument, the command ESC + will repeat the last escape
command which you gave with a numeric argument, but add one to the argument.
BREAK + will do the same thing but subtract one.  (Note that there cannot be an
ESC - command for this latter function because ESC - is equivalent to BREAK.) 
With the ESC + and BREAK + commands, what is incremented or decremented is
actually the absolute value of the argument; for example, BREAK 3 V followed by
ESC + does the equivalent of BREAK 4 V.

The command ESC * will repeat the last escape command which had a numeric
argument, without changing the numeric argument.  BREAK * will repeat the
command but replacing ESC by BREAK or vice versa.  Note that none of ESC *,
ESC +, etc. will repeat an escape command which was given without a numeric
argument.

Occasionally you may find that you are running a program and want to give some
monitor command without stopping your program.  To do this, you can type ESC .
to put your terminal into monitor mode, thus allowing you to type commands to
the monitor.  Type BREAK . to restore your terminal to user mode so that you can
once again type commands to your program.  These commands will type out a blank
line whenever actually changing between monitor and user modes.  These commands
also clear your terminal's input buffer before switching modes, on the
assumption that previously typed text was really intended for the mode (monitor
or user program) that you are switching away from.  To avoid this clearing of
your input buffer, use an argument of 1 in either of these commands; that is,
ESC 1 . and BREAK 1 . change modes but do not clear text already typed.

You can take advantage of the terminal input buffer clearing done by BREAK . if
you ever want to take back text you've typed but which your program hasn't yet
read.  This text is called typeahead.  Just type BREAK . which keeps your
terminal in user mode but clears out any typeahead.
                                2.5  The Wholine


The next set of commands have to do with the wholine, a display of system status
and the status of a particular job on the top two lines of your screen.  Once
you start a wholine display, it is automatically updated until you turn it off
explicitly.  To start a wholine for the job at your terminal, type ESC W.  You
can see the wholine for another job, job number n, by typing ESC n W.  Typing
BREAK n W will display the wholine for the job using terminal number n.  To turn
off your wholine display, type BREAK W.  (Note: this does not actually make the
wholine disappear (except on IIIs) but it makes it quit getting updated.) 
Typing ESC W causes your wholine to be updated immediately, even if it was
already being displayed.  The command ESC 0 W causes whatever wholine you are
watching to be updated immediately.

One use of the wholine is to keep track of the progress of a job of yours other
than the one at the terminal you're using.  To facilitate this, typing ESC Q
will display the wholine of the next job in the monitor's job table with your
programmer name (or with the same name as the job whose wholine you are already
displaying, if any).  Typing ESC Q repeatedly will cycle through all such jobs.
BREAK Q does the same thing, except that it searches the job table backwards.
ESC or BREAK Q simulates the typing of ESC n W, where n is the job number it
finds, so that you can use ESC * to force updating of the display.

A final form of the escape command to display a wholine is provided to find the
wholine for a particular user if you do not know his or her job number:
ESC [ prg CONTROL-W where "prg" is the user's programmer name (not project name)
and the square bracket is used to indicate this form of argument.  This command
will display the wholine for the lowest numbered job logged in with the
specified programmer name; if the user has more than one job, ESC Q can be used
to find the others.

Here is the wholine format, with descriptions of the various fields.

LOAD DM III DD JBS,TCOR R,RCOR UCOR NL% DSKQ DSKF DATE DAY TIME TEMPF TEMPC
JOB PPN TTY#! QUEUE   JOBNAM SIZE RUNTIME-RP XTIME-XP DSK SEG (ALIAS)

The first line is the system wholine:

  LOAD     decayed average number of jobs running (in TQ or RUNQ)
  DM       number of high-speed phone lines in use (for Datamedias, etc.)
  III      number of III terminals in use (maximum=2, where space=0, `-'=1 and
           `+'=2)
  DD       number of Data Disc channels in use (maximum=31)
  JBS      number of jobs logged in
  TCOR     total core of all jobs (including those swapped out) in 512-word
           pages
  R        number of jobs actually run in the last few seconds
  RCOR     total core of the jobs counted in R
  UCOR     amount of core available for running user jobs
  NL       system null-time percentage over the last few seconds
  DSKQ     number of jobs waiting to use the disk
  DSKF     number of free tracks on the disk
  DATE     today
  DAY      day of the week
  TIME     time of day (24-hr clock)
  TEMPF    outside temperature in Farenheit
  TEMPC    outside temperature in Celsius

The second line refers to a particular job:

  JOB      the job number of the job being displayed
  PPN      its logged-in project-programmer name
  TTY      its terminal number (in octal) or DET for detached jobs
  #        "#" is displayed if the wholine is not for this TTY's job
  !        "!" is displayed for this TTY's job, if the TTY is hidden (see page
           18)
  QUEUE    the system queue that the job is in (see below)
  JOBNAM   the program being run
  SIZE     size of the job's core image in pages
  RUNTIME  total run time since login, in minutes and seconds
  RP       RUNTIME expressed as a percentage of the job's total time trying to
           run
  XTIME    incremental runtime, normally reset on terminal input but see below
  XP       XTIME as a percentage of incremental time trying to run
  DSKOPS   number of incremental disk operations (reset along with XTIME)
  SEGNAM   name of upper segment, if any
  ALIAS    disk PPN (see below), if any

Some of these need more explanation.  The QUEUE is an indication of the
immediate status of the job--is it runnable, waiting for input, stopped, etc.
These are the possible queue names:

  RUNQ     The job is runnable and not waiting for I/O, etc.
  TQ       This is a high-priority run queue which jobs are in for a short
           time after leaving certain kinds of I/O wait.
  STOP     The job is stopped because it exited, the user typed CALL, or there
           was an error in running the job.
  NULQ     The job has no core image.
  IOWQ     The job is waiting for some input/output operation, or for the
           completion of a SLEEP or JOBRD UUO.  In the case of input or
           output, you may see instead of IOWQ the name of the device being
           used and the direction of the transfer, e.g., TTYO for terminal
           output, MTAI for MTA input.  (For devices like IMP and DLN, the
           fourth letter is always W for Wait regardless of the direction of
           transfer.)  Also, if the job is waiting for terminal input, you may
           see these special pseudo-queue names:
    LINE     The terminal is waiting for an entire line of input.
    CHAR     The terminal is waiting for a single character of input.
    SNK      The program has done a SNEAKW UUO and will read the next
             single character of terminal input without removing it from
             the input buffer.
  DIOW     The job is waiting for some I/O operation and will not be swapped
           out before it is completed.
  INTW     The job has suspended itself waiting for an interrupt.
  DWQ      The job is waiting for a device (e.g., XGP) to be free.
  MTQ      The job is waiting for the magnetic tape controller.
  DTQ      The job is waiting for the DECtape controller.
  DCQ      The job is waiting for the data controller (used for mag and DEC
           tapes).
  ELFQ     The job is waiting for the ELF 10/11 interface.
  CMQ      The job is not in core and needs to be brought in quickly.

Some special characters may be displayed after the queue name:

      -    The job is currently running.
      *    The job is swapped out.  A second * means the upper segment is
           swapped out.
      ⊗    The job has been locked in core by the LOCK UUO.
      \    The job is running a spacewar module.

Some of the above may not be clear until you read the UUO Manual.  The alias is
a PPN used as the default directory for disk files instead of your logged-in
PPN.  There is an ALIAS monitor command to set the alias for your job.

XTIME is an incremental run time, measured in minutes, seconds, and 60ths of a
second (a 60th of a second is called a tick).  It is normally reset whenever the
program is started by a monitor command other than CONTINUE, and also whenever
the job is awakened by input from the terminal after having been in IOWQ waiting
for such input.  Note that if you type ahead, so that the job never enters IOWQ,
terminal input will not reset XTIME.  It is possible to inhibit resetting of
XTIME with the BREAK X command (see below).  If resetting is inhibited, the
character separating seconds from ticks in the display will be " instead of ' as
it usually is.

BREAK X inhibits resetting your job's XTIME, for example so that you can time
some sequence of commands by using the wholine incremental run time.  ESC X
resumes the automatic resetting as described above.  Neither of these changes
the current value of your XTIME.  Typing ESC 1 X will set your XTIME to zero;
BREAK 1 X will set it equal to your RTIME (total run time).  Both ESC 1 X and
BREAK 1 X inhibit automatic resetting, so you have to type ESC X if you want to
restore this.

When a job has not run for several minutes, the ticks part of the XTIME field,
the XP field, and the DSKOPS field in its wholine display are replaced with the
words "Idle n mins" to indicate that the user may have left even though still
logged in.  When the job's wholine is displayed in response to an explicit ESC W
or equivalent command, however, the full XTIME and DSKOPS are displayed once
even if the job is idle.  Idle time is never displayed in wholines on IIIs.

User programs may add a third line to their wholine display: a display of the
status of a particular file in use by the job.  What is displayed is the file
name, extension, PPN, file length in records, USET pointer, and flags (R for
read, W for write, RA for read-alter, U for UDP, E for end of file); this is the
same information typed by the FILES command, page 52.  This information is
displayed to the right of the HOLDING message area on the third line of the
screen.  This display is started by the SHOWIT UUO, or by ESC 2 X (see below).

The command ESC 2 X will start a file-status display of the first file in the
system's list of files in use by the job whose wholine you are displaying, if it
has no file-status display already, or the next file if it does.  The command
can therefore be repeated as necessary to find a particular file.  The command
BREAK 2 X will erase the file-status display.  Since the file-status display is
associated with the job, rather than just with the wholine display on your own
terminal, these commands are accepted only if the job's programmer name is the
same as yours, or if it is a detached job.
                           2.6  Page Printer Control


There are two ways of printing on display terminals.  To exploit the full
capabilities of the display for graphics, display programs can explicitly
control the positioning of points, vectors, or characters.  On III terminals, 16
such display programs can be written independently, and any combination of them
activated or displayed at any time under program control.  These display
programs are called pieces of glass.  On Data Disc and individual display
terminals, a display program runs only once, and is displayed until erased
explicitly.  There are no pieces of glass as on IIIs.  On a Data Disc, the
effect of multiple pieces of glass can be gotten in a different way by
displaying more than one channel on the screen (see Section 2.7, which
describes the video switch).

The other way of printing on a display terminal is simply to output text to be
printed in order as if on a piece of paper.  The monitor automatically "scrolls"
such output; when the area of the screen being used fills up, the text is moved
up a few lines, with the top part disappearing.  Sixteen of these pieces of
paper can be displayed at once, on different parts of the screen.  At any time,
one of these pieces of paper must be selected by the program as the one to
receive page printer output.  The dimensions of each piece of paper are
controlled by the program, but the currently selected one can also be controlled
from the terminal with ESC commands.

The dimensions of the page printer include several factors.  First, the vertical
position of the top line of the page.  This can be set by the command ESC n Y
for line n.  (Lines 1 and 2 are where the wholine goes; the normal position is
line 4.)  ESC Y resets the vertical position to normal.

The scrolling function is controlled by two parameters: the number of lines
typed before a glitch (the upward repositioning of the text), and the number of
glitches on the page.  These are set by ESC n L for lines/glitch and ESC n G for
glitches/page.  The defaults for these are terminal-type dependent: on Data
Discs, 4 glitches of 9 lines per glitch; on IIIs, 12 glitches of 2 lines each;
and on individual displays, as many 3-line glitches as will fit on the screen.
ESC L and ESC G with no argument restore the respective counts to normal.
(Note: there are BREAK L and BREAK G commands, having to do with the video
switch; those commands are entirely unrelated to ESC L and ESC G.)

It is possible to cause automatic holding, as with CONTROL-BREAK, every n lines
or every n glitches.  The commands for this are ESC n E for every n lines, and
ESC n J for every n glitches.  At each pause, the word HOLDING will appear on
the third line of the display.  CONTROL-CLEAR will resume output as usual.  ESC
E and ESC J disable the respective automatic pauses.

Typing ESC N will normalize your page printer geometry.  BREAK N will clear your
screen, select piece of paper 0, normalize the page printer, and display the
text in the page at the normal position.  To refresh the current page printer
display without changing the page printer geometry, type ESC P.  BREAK P will
clear the screen and then do ESC P.  These are useful for getting rid of any
noise which may appear on your screen.  There is a rarely-used ESC R to refresh
just the display of your line editor buffer.

The command ESC FORM will erase the currently selected piece of paper.  Then, if
the terminal is in monitor mode (waiting for a monitor command), it will type a
dot.

Note: Any RESET of your job, either by the RESET UUO or automatically by the
system, eliminates all but piece of paper 0, selects that piece of paper for
further output, and normalizes the page printer display.  The UUO Manual
explains the RESET function.
                             2.7  Data Disc Control


Some ESC and BREAK commands are specific to one of the three kinds of display
terminal.  This section is about the commands for Data Discs.

The usual display on a Data Disc screen is green letters (hereafter called
"white") on a black background.  It is also possible to display black on white,
by typing BREAK C.  To restore the normal white on black, type ESC C.  Both of
these clear the screen, so you have to type ESC P to refresh your page printer
display.  Black on white display requires increasing the contrast and brightness
controls to be visible.  This is not the world's most useful feature; it is also
possible, under program control, to display only part of the screen in black on
white.
                               Virtual Terminals


The remaining Data Disc escape commands control the connection between your
physical terminal and some virtual terminal defined by the system software.  For
all types of terminal other than Data Disc terminals (dialup, hardcopy, III, or
pseudo-TTY), each physical terminal corresponds to a unique software TTY number.
For example, the Teletype in the Prancing Pony is always associated with the
software terminal line called TTY30.  This unique correspondence does not exist
for Data Disc terminals.  Since there are about 60 physical Data Disc terminals,
and only 31 video channels available for users, not all of the physical
terminals can be used at once; when a user first types on a vacant Data Disc
keyboard, the monitor assigns a virtual terminal line number and associates that
number with the physical terminal.  For example, the Data Disc terminal located
near the PDP-10 is TV-66, but it may or may not be associated with virtual
TTY66.

Actually, there are two different correspondences to consider: what appears on a
particular physical screen may not correspond to the virtual terminal controlled
by the associated keyboard.  That is, you may be seeing one thing on your screen
while typing at something different.  There are escape commands both to
determine keyboard mapping (that is, which virtual line is being controlled by
your keyboard) and to control the video switch.  The video switch allows you to
select, from among the 32 Data Disc channels, plus various TV cameras and video
synthesizers, what you want to see on your screen.  You can see more than one
Data Disc channel at a time, but only one of the analog channels (the cameras).
You can select an analog channel along with a Data Disc channel only if the two
are synchronized; e.g., the commercial TV signal can't be combined with a Data
Disc channel because the synchronization of the former is not under our control.

In the following discussion, the word "keyboard" refers to a physical Data Disc
terminal keyboard, "screen" to a physical screen, "line" or "terminal line" to a
virtual terminal, and "channel" to one of the video images generated by the Data
Disc controller.  A number like TV-102 refers to a keyboard and screen, TTY66 to
a terminal line, and DD2 to a Data Disc channel.  Note: all of these numbers are
octal; there is no TTY68!

When a virtual terminal line is created (by typing at an available keyboard), it
is given a Data Disc channel.  This is the terminal's "main channel".  The job
running on that line may choose to select other channels for viewing in addition
to (or instead of) its main channel.  For example, a program which does video
synthesis may choose to display the video synthesizer output on its controlling
terminal line.  The channels selected for a particular line constitute the
line's "video map".  Actually, each line has both a temporary and a permanent
map; a program RESET cancels any changes to the temporary map and reverts to the
permanent map.  (The permanent map does not necessarily select the line's main
channel, although that is the most common case; both temporary and permanent
maps are controlled by the program.)  A screen which is watching the video map
of a particular line is said to be "tied" to that line.  Normally, when a
keyboard is mapped to a line, the associated screen is tied to the same line.

Just as a terminal line can be hidden to discourage spying (see page 18), Data
Disc channels in use by a job may be public or private.  Only public channels
may be selected by other users.  The main channel used by a terminal is normally
public.  The command ESC H hides (makes private) your terminal's main channel;
BREAK H makes it public.
                                Keyboard Mapping


Although a keyboard can only be mapped to one line at a time, you may be using
several lines from the same physical terminal and mapping back and forth.
(Note: during the day, when there is a shortage of Data Disc channels, this use
of more than one line is strongly discouraged!) Therefore, at any given moment a
particular line may not have any keyboard mapped to it.  However, the monitor
remembers which keyboard is responsible for the line.  This is normally the
keyboard which most recently typed a character into the line.  (In other words,
if you map to a line and map away again without typing anything into it, you do
not become responsible for it.)  It is also possible to claim or disclaim
responsibility for a line explicitly.  The concept of responsibility is
important for two main reasons: audio beeps directed to a line (see Section
2.9) are heard at the responsible physical terminal, even if its keyboard is
mapped elsewhere at the time; and the keyboard responsible for a line can map to
it even if it is hidden.  When a keyboard becomes responsible for a line for
which some other keyboard was previously responsible, the system also remembers
the previously responsible keyboard, so that if the new responsible keyboard
disowns the line, responsibility for it is returned to the previously
responsible keyboard.  However, only one previously responsible keyboard is
remembered.

A keyboard may be responsible for more than one line, but there is always one
line which is the home line for that keyboard.  This is normally the first line
into which a previously unused keyboard types, but can be changed by explicit
escape commands.

All of the keyboard mapping commands in this section tie your screen to the same
line they map your keyboard to.  Therefore, you will normally see what you are
typing at, unless you give a special video switch command to control the screen
separately.

Usually when you want to map your keyboard, what you are interested in is
mapping to a particular person's terminal line.  This is done with the command
ESC [ prg ] where prg is the programmer name of the person you want to map to.
If you only want to look at the person's screen, without the possibility of
accidentally typing at his job, then you can end this escape command with
CONTROL-L instead of "]", that is ESC [ prg CONTROL-L (this doesn't map your
keyboard, it only ties your screen to the other user's terminal line).  And if
all you want to do is see the given user's wholine on your terminal, then use
CONTROL-W instead of "]", that is ESC [ prg CONTROL-W.  If you want to map your
DD keyboard to a particular line whose terminal number you know, then you can
use the mapping command ESC n M, where n is the line number.  For you to do any
of these commands (except the wholine command), the target line must be either
public (see BREAK H above), your own (i.e., you are responsible for it), or not
in use.  That is, you cannot map this way to private DD line.

Typing ESC M will map you back to your home line.

The command BREAK M maps your keyboard to the line of another job with the same
programmer name as the one to which you are currently mapped, if there is
another such job on a Data Disc line.  This is a good way of mapping back and
forth between two or more DD lines that are logged in under the same programmer
name (either your own or someone else's that you have mapped to with
ESC [ prg ] ).  In any case, the line must be public, or your keyboard must be
responsible for it, as in the ESC [ prg ] command.

The command BREAK R maps your keyboard to another line for which it is
responsible, if any.  Repeated BREAK R commands will cycle through all such
lines.  (Note: there is an ESC R command which is unrelated to this one.)

If you want to get a new DD line, either because you need a second line or
because there are no DD channels available, the command ESC CALL will request
one.  If there are any available DD channels, then this command will map you to
a fresh DD line and type a CALL at it, making you responsible for it; you can
then log in.  If all the DD channels are in use, then the ESC CALL command will
put you (your keyboard) in the queue of users waiting for a DD channel; it will
also map you to the "available" message (the DD channel seen on unused
terminals), which will display the numbers of the first few keyboards in the
queue.  You can then, of course, type ESC M to return to your other line, if you
have one, while you're waiting.  When you are placed in the queue, you will hear
a beep to notify you.  If you don't get the beep, it means that the queue was
full (this is very rare).  Each keyboard can only be in the queue once, even if
you type ESC CALL again.  You can leave the queue by typing BREAK CALL, which
will beep you if and only if you were actually in the queue.  If you are in the
queue, then when your turn comes to get a free channel, you are beeped again.
You are made responsible for the free line, so you can map to it with the
BREAK R command (if you are mapped to the available message when your free line
arrives, then you will automatically be mapped to the new line).  The beeps
associated with entering and leaving the Data Disc queue are not disabled by the
BREAK B command, which prevents other kinds of beeping.

If you get tired of waiting for a DD channel, or need to get something done in a
hurry, and if you're willing to put up with a horrible DD channel, then you can
type ESC ! to get a detached DD channel for normal use, if there are any such
channels.  (With luck, all the channels will be working perfectly and so none
will be detached.)  Any horrible-looking channel gets detached so that usually
no one has to use it, but if you're desperate enough, then you can use ESC ! to
get one.  When you free up the horrible channel, it is automatically re-detached
so that no one else will get it by accident.  And if you don't like the first
horrible channel you get with ESC ! then you can type ESC ! again and see what
the next detached channel looks like.  While you're using a horrible channel,
there is no reason not to be waiting in the normal DD queue (with ESC CALL) for
a good channel and then moving your job there when you finally get one.
Warning: Some bad channels may not look horrible--they may not work at all, so
you may not see anything if you get such a channel.  In that case, you should
just forget the channel (with BREAK CLEAR for example), unless you just want to
type blindly one or two quick monitor commands without seeing the results!

If you want to try out a particular DD channel (detached or not), the ESC n !
command can be given in order to get DD channel n for normal use.  This only
works if the particular channel is free when you give the command.  When you
free up a detached channel that you got this way, it is automatically detached
again.

Please note that all the keyboard mapping commands apply to your physical
terminal.  Most escape commands, like ordinary characters or line editor
commands, apply to a virtual terminal line; for example, a command like ESC W
affects the line to which you are mapped, and claims responsibility for the line
as a side effect.  The mapping commands, however, do not affect any line, and do
not make you responsible for the line to which you are mapped.  The video switch
commands and audio switch commands, to be described shortly, also apply to your
physical terminal.

The command ESC CLEAR is used to set your home terminal line explicitly to the
one to which you are currently mapped.  This home terminal line is the one to
which the ESC M command maps your keyboard.  You also become responsible for the
line, if you weren't before.  The command is rarely needed, because the default
home terminal line is the first one into which you typed from a previously
unused keyboard.  If you lose responsibility for your home line, the system will
assign another of the lines you are responsible for as your home line.  (If you
are not responsible for any other lines, your keyboard is considered unused.) 
You can lose responsibility because someone else maps to the line and claims
responsibility, or because the line "goes available" a few seconds after the job
on that line logs out.  You can also explicitly disclaim responsibility for a
line by typing BREAK CLEAR while tied to (i.e., viewing) that line.  This
command should be used when you want to permanently dissociate your physical
terminal from the line, e.g., when you move to another room.
                             Video Switch Commands


The keyboard mapping commands automatically also tie your screen to the line to
which your keyboard is being mapped.  To tie your screen to a different line,
you can specify the line either by the programmer name of its logged-in job or
by the terminal line number.  Usually you want to look at a particular person's
line, so you use the command ESC [ prg CONTROL-L which ties your screen to a
line being used by the given programmer.  The command BREAK G can be used to tie
to other lines of the same person, since this screen-tying command cycles
through all the DD lines in use by the same programmer name, just as the
keyboard-mapping command BREAK R does.  If you happen to know the number of the
DD line you want to tie to, then you can use BREAK n L (note that this is
completely unrelated to the ESC n L command described earlier!).  The same
privacy rules which affect keyboard mapping also apply to screen tying.

BREAK L will tie your screen back to the line to which your keyboard is mapped.

When a screen is tied to a line, the program running under control of that line
may modify the video map of the line, and such changes affect any screen tied to
the line.  The following video switch commands select a video map for your
screen which is independent of any program selection.  After you give such a
command, your screen is untied until you give a tying command like BREAK L.

Video switch commands are generally of the form ESC n x, where n is a channel
number (Data Disc or analog channel) and x is the command letter.  The form
BREAK n x interprets n as a terminal line number if n is a valid Data Disc line
number, and selects that line's main channel.  (This is not the same as
BREAK n L, which selects whatever channel(s) the specified line has in its map!)
Thus, ESC 30 S selects Data Disc channel 30, but BREAK 70 S selects whatever
channel is assigned to TTY70.  ESC x with no number selects the main channel
associated with the line to which your keyboard is mapped.  BREAK n x where n is
5 or 6 selects analog channel 40+n.  The reason for this alternate notation is
that these analog channels are TV receivers, and the BREAK n x command selects
the sound from the corresponding TV set (see the audio switch section below) as
well as the picture.  BREAK x with no number selects the available channel, the
one which is seen by screens not in use.  This channel contains a display of
status information for all jobs logged in.

For the remainder of this subsection, the notation { ... } means that the
characters inside the braces are optional, e.g., BREAK {n} S in the next
paragraph means that the paragraph applies both to BREAK n S and to BREAK S
without an argument.  The notation [ ... | ... ] means that any of the
characters shown may be used, e.g., [ESC|BREAK] means that the paragraph applies
to both the ESC and the BREAK form of a command.  (The two forms are
distinguished by the interpretation of the command argument, as explained in the
previous paragraph.)

The commands ESC n S and BREAK {n} S untie your screen and set its untied map.
(Note that ESC S with no argument is interpreted specially, as explained
below.)  The map will not be changed until you give another video switch
command.

The [ESC|BREAK] {n} T commands (note that ESC T is included) are temporary
mapping commands.  In addition to the effect described above, they set a flag
bit associated with your screen so that when the program on the line to which
your keyboard is mapped does a video switch RESET operation (either explicitly
or because of a RESET of the job as a whole) you are automatically re-tied to
that terminal as if you had typed BREAK L.  The flag is cleared by
[ESC|BREAK] {n} S and by the tying commands (the keyboard mapping commands and
BREAK {n} L).

It is possible to view two or more DD channels at the same time, with the video
images from all the selected channels being `OR'ed together.  The commands
[ESC|BREAK] {n} [A|D] add and delete channels to and from the selection that you
are currently watching, after first untying your screen (if tied) and copying
the previous map into your untied map.  If a temporary untied map is in effect
(you've done an [ESC|BREAK] {n} T), then this escape command also will be
temporary (i.e., it will be undone when the program on the line you're mapped to
does a display reset).

The ESC S command with no argument is interpreted differently from the other
video switch commands.  It ties you to the line to which your keyboard is
mapped, like BREAK L, and also sets that line's temporary and permanent maps to
its main channel (the one assigned to it when it was first typed on).  Thus,
ESC S undoes whatever video switch manipulation your program has done as well as
tying you to it.  It affects other users tied to the line you are mapped to.
Note that only ESC S has the effect described in this paragraph, not, e.g.,
ESC T.  ESC S, like other forms of video switch reset, re-ties anyone who is
keyboard-mapped to your line but untied by [ESC|BREAK] {n} T.
                           Spying on Hidden Terminals


When someone hides his or her terminal (by typing ESC H), it is considered a
severe violation both of common courtesy and of laboratory policy to override
the hidden status and spy on the terminal, unless at the specific request of its
owner.  Occasionally, though, you may want to see your own hidden terminal while
you are in someone else's office, or someone may ask you to override hiding.
For this reason, special escape commands are provided which allow you to map or
tie to hidden lines.  These commands are prefixed with the special character

        CONTROL-META-TOP-UNSHIFT-BREAK

(that is, the SHIFT and SHIFT LOCK keys must not be down).  This character is
known as MAGIC and the commands which use it are magic mapping commands.  The
commands are equivalent to ordinary mapping commands, except that they ignore
hiding:

  Magic cmd           Equivalent normal cmd   Function

  MAGIC n M           ESC n M                 kbd map to TTYn
  MAGIC n L           BREAK n L               tie screen to TTYn
  MAGIC G             BREAK G                 tie to same prg
  MAGIC n S           ESC n S                 map screen to DD chan n
  MAGIC n A           ESC n A                 add DD chan n to map
  MAGIC n T           ESC n T                 temp map screen to DD chan n
  MAGIC [ prg ]       ESC [ prg ]             kbd map to prg
  MAGIC [ prg CTL-M   ESC [ prg CTL-M         kbd map to prg
  MAGIC [ prg CTL-L   ESC [ prg CTL-L         tie screen to prg

When you type ESC H, anyone who is mapped or tied to your line will be mapped to
his or her home terminal line, or tied to the line mapped to if not the same as
yours, even if magic-mapped.  But they can repeat the magic mapping command
after you type ESC H.
                                2.8  III Control


At a III terminal, several different display programs, called pieces of glass
("pog"), may be running at once.  You can choose which of these (zero or more at
once) are actually displayed.

ESC n S selects piece of glass number n only.  ESC n A adds piece of glass n,
and ESC n D deletes pog n.  If no numeric argument is used, these commands apply
to all pogs, e.g., ESC D clears all pogs from the screen.

ESC C eliminates all pogs (your page printer is unaffected).  It is different
from ESC D in that the display programs are completely forgotten, so they cannot
be reselected.

Note that the selection of display programs can also be controlled by a UUO in
your program.
                           2.9  Audio Switch Control


Associated with each Data Disc or III terminal is a loudspeaker which can be
connected to various sound sources under computer control, by an audio switch
analogous to the video switch for Data Disc channels.  There are 20 (octal)
audio switch input channels, numbered 0 to 17.  Only one channel can be
connected to your speaker at a time.

For Data Disc terminals, the audio switch selection applies to a physical
terminal, not to a virtual terminal line.  Program-initiated audio switch
selections affect the physical terminal which is responsible for the program's
terminal line, if any.

The command ESC n U will select audio channel n.  ESC U selects channel 0, which
is always silent.

At a Data Disc, the BREAK [5|6] [S|A|T] commands select both picture and sound
from a TV receiver.  Specifically, video channel 40+n and audio channel 10+n-1
are selected for n either 5 or 6.

Your program can control the audio switch selection for your terminal by UUO.
Although programs cannot in general change the audio switch setting for another
terminal, there is a BEEP UUO which can be used to cause any terminal's
loudspeaker to be connected to the beep generator for a short time (less than
one second).  This is used by, e.g., the SEND command to call the recipient's
attention to a message on his screen.  You can permit or refuse such beep
connections by UUO or by escape commands; BREAK B refuses beeps, and ESC B
permits them.  Any change to your audio switch setting by other means (e.g., ESC
U) also cancels the effect of BREAK B, so you must repeat the BREAK B command
after changing your selection.

The ESC Z command enables automatic beeping for the job controlled by your
terminal line (virtual terminal for Data Discs), so that you will be beeped
whenever your program runs for 15 seconds or more of real time and then becomes
ready for you to type something.  More precisely, if you are enabled for this
automatic beeping, then you will be beeped when your job enters STOPQ, or IOWQ
for TTY input, or INTWQ for TTY interrupts only, provided that your job's
incremental run time plus wait time is 15 seconds or greater.  A job's
incremental wait time is the amount of time spent waiting for the system since
the last command was given that caused the program to leave TTY input IOWQ or
STOPQ.  This wait time corresponds precisely to the incremental run time
displayed on the wholine--both incremental times are reset at the same instant.
Also, if you type BREAK X or a similar command which causes the incremental
times never to be reset, then you will never be beeped automatically.

The command ESC n B can be used to make a temporary selection of a silent
channel for n minutes.  This is useful when listening to the radio, to avoid
commercials or obnoxious songs.  This can be prematurely undone with the command
BREAK U.

As we go to press, the following audio switch inputs are connected:

  0  silence               10  KDFC
  1  bells                 11  KSJO
  2  (unused)              12  KYUU
  3  (unused)              13  (unused)
  4  (unused)              14  TV 45 audio
  5  beep generator        15  TV 46 audio
  6  (unused)              16  silence
  7  (unused)              17  KFJC

Audio inputs 14-15 correspond to video inputs 45-46.
                       2.10  Individual Display Terminals


The WAITS display service, which was designed around the Data Disc and III
displays, is available to users of certain other types of display terminals that
are supported by WAITS.  The original such additional supported display type was
the Datamedia, but WAITS now supports several others and new display types are
now added fairly often.  The fact that the first display supported was a
Datamedia (or DM) will explain why much documentation tells how to do certain
things on a DM.  However, basically anything that can be done on a DM can be
done on the other supported display types, although there will be certain minor
differences that result from the different designs reflected in various
terminals.  Supported display terminals of this class (not DDs and not IIIs)
will be referred to as individual display terminals or sometimes as
Datamedia-like or Datamedia-type displays.  Almost all the features of Data Disc
terminals (except mapping and audio) are available on individual display
terminals.

Ideally, all displays would have (at least) two extra shift-like keys that would
represent the Data Disc and III keys called CONTROL and META.  Any display
keyboard that effectively does have these CONTROL and META keys can be used just
as a Data Disc keyboard (provided the display generates the right codes for
these keys).  This is in fact the case for the DM3025 display with the WAITS
keyboard (which looks almost identical to a DD keyboard, but with some
additional keys).

Among displays that don't have WAITS-type CONTROL and META keys, there are two
major classes of supported displays: those with an EDIT key and those without an
EDIT key.  An EDIT key is one that enables the user to control the parity bit on
every character sent to the computer; this is a shift-like key held down (as
desired) while another key is struck.  Such an EDIT key is the equivalent of the
CONTROL key on Data Discs and IIIs.  (Unfortunately, some people call such a key
a "META" key instead of an "EDIT" key, but don't confuse this with the META key
on Data Discs and IIIs -- there is no connection.  We will always call the key
that controls the parity bit an EDIT key.)

On a display keyboard with only an EDIT key (instead of CONTROL and META), it is
necessary to type more keystrokes to get the effects normally gotten from using
the DD keys CONTROL and META.  On a display keyboard without even an EDIT key
(called a "NOEDIT" display), still more keystrokes are necessary, in general.
However, for both EDIT-key displays and NOEDIT displays, the WAITS system
attempts to make it as easy as possible to get all the DD-type keyboard input
without too much extra typing.

Please note that the control (CTRL) key on most terminals is not the same as the
WAITS CONTROL key.  Instead, CTRL is like the WAITS TOP key: it is used to
generate the nonstandard WAITS graphic characters.  The CTRL key subtracts 100
octal from the character code normally produced by a character key.  For
example, the letter T is octal code 124; CTRL-T is 024, which is ∀ in the WAITS
character set.  The command HELP EDKEY will print on the XGP a list of the
correspondences between CTRL characters and the WAITS equivalents, along with
other information about using an EDIT-key keyboard.  The command HELP NOEKEY
will print similar information about how to use a NOEDIT keyboard.  These tables
printed on the XGP are intended to be cut out and stuck on your keyboard as a
permanent reference guide.  The information from these tables is also presented
in Section 2.11 for EDIT displays and Section 2.12 for NOEDIT displays, along
with detailed descriptions of use of these two families of individual displays.

Individual displays are assumed to use standard ASCII characters.  Where ASCII
differs from the WAITS character set (see Section 3), the system automatically
converts both input and output.

On display screens that do not have symbols for all 128 of the WAITS characters,
the extra WAITS characters (namely, the ASCII CTRL characters) will be displayed
in a special form.  These characters will be displayed as non-CTRL characters
with their emphasis reversed (the emphasis is usually bold, reverse video, or
blinking, depending on the terminal).  For example, the character partial-sign
(∂ or ↑O) will be displayed on some terminals as a bold lowercase "o".

The line editor on individual displays works just as on DD and III terminals,
except that there is no line cursor, only a character cursor.  However, the
characters in the line editor are displayed with their emphasis reversed (unless
you use TTY NO BOLD), so that you can readily tell what is in the line editor.

When you tell the system that your terminal is a display, it will erase the
display screen and then set the terminal's tab stops (if any) with a message at
the top of the screen.  (You only get the message when tab stops are being
set.)  When you are holding typeout on an individual display, (even if the
HOLDING message does not appear), your line editor will appear on the HOLDING
message line (the third line of the screen).

The escape commands which are not specific to Data Discs or to IIIs (those in
Section 2.4 through Section 2.6) are available on individual displays too.  See
Section 2.11 and Section 2.12 on EDIT and NOEDIT displays, respectively, for
how to type the ESCAPE character.

A special command for use only on an individual display is flush output queues,
which clears the display's priority output queues.  This is used to discard
unneeded text that is being output to the terminal.  There are five priority
output queues through which the system outputs text to an individual display;
the priority system is used to let more urgent output (e.g., line editor
displaying) interrupt less urgent text (e.g., the wholine).  To flush the output
queues, thus saving the time that would have been used to output the given text,
type EDIT-CLEAR (EDIT-↑↑) on an EDIT-key display or CTRL-\ on a NOEDIT display.
ESC 1 CR works on all individual displays to flush the queues.  This can be
useful if E or the system is putting out text that you don't care about for one
reason or another.

Two more special escape commands are available only on individual displays, for
limiting user program display output to a specified range of columns on the
display.  ESC m < (where m is decimal) suppresses all user display output to the
left of column m, and ESC n > (n decimal) suppresses all user display output to
the right of column n.  The only type of output these commands affect is user
program output generated by the UPGIOT UUO (i.e., display program output), and
even then it does not affect output in insert/delete mode nor does it affect
output of RETURNs and LINEs.

Note that ESC 5 < (for example) will suppress output to the left of column 5 and
therefore whatever text already appears in columns 1 to 4 will (normally) not be
erased even when new text appears starting in column 5.  However, after an
ESC 40 > (for example) old text in columns from 41 up will usually be erased by
new text at or before column 40 since output of actual text usually causes the
rest of the line to be erased (except when this erase-to-end-of-line feature is
inhibited).

Thus these commands can be used to speed up displaying by E, WHO and other
display programs by suppressing unneeded output.

ESC < resets the left display margin to zero and ESC > resets the right display
margin to infinity.  ESC N resets both margins, as does a RESET or DPYCLR UUO.
BREAK > sets the right margin to 0, thus suppressing all display program text.

For some important information on the use of individual displays, including how
to set up a telephone connection to the PDP-10 and how to use a display through
a network, see the file DM.ME[UP,DOC].
                Supported Types of Individual Display Terminals


Listed below are the types of display terminals currently supported by the WAITS
system.  (See page 32 for a description of the capabilities needed by any new
display type that is to be supported by WAITS.)

  Display type   Description

   DM2500        basic Datamedia 2500 display (tabs are assumed) with EDIT key
   DM128         DM 2500 with single-char tape mode mod, displays 128 graphics
   DM3025        Datamedia 3025 emulating 2500
   DMWAITS       Datamedia 3025 modified with the WAITS keyboard and program
   C100A         Concept 100, version A (local designation: fancy C100)
   C100B         Concept 100, version B (local designation: plain C100)
   TELERAY       Teleray 1000 series, with EDIT key
   TELERB        Teleray 1000 series, without EDIT key
   HP2648A       Hewlett-Packard 2648A, without EDIT key.  (The 2648A support
                 should generally work for the 2640 and the 2621, although
                 TTY NO TABS may be needed.)
   HEATH19       Heath H19 (also known as Zenith Z19), without EDIT key
   TELEVIDEO     Televideo 912/920/950, without EDIT key
   AMBASSADOR    Ann Arbor Ambassador, with EDIT key
   ALTOTALK      Xerox ALTO running the TALK program, with EDIT key

Each of the above terminal types comes with certain parameter defaults.  These
parameters can be changed with various monitor commands and UUOs and with a
special set of login options; the defaults are given below under the login
options.  To find out the current settings for your terminal, you can run the
system program TTYSET with the monitor command:

        R TTYSET

To find out the settings for someone else's terminal, type the command

        R TTYSET;nnn

where nnn is the line number of the terminal of interest.

Here are the display parameters and the monitor commands for setting them.  All
but the first command in the table below require that you have already set your
display type.  The "[NO]" in various entries below means the the word "NO" is
optional in these commands and determines which state the particular parameter
is set to.

  Command            Parameter determined

  TTY <display> <h> <w> Display type, height and width
  TTY PADBAUD dddd   Baud rate used for padding calculations
  TTY PADCHAR ooo    Octal value for character used for padding
  TTY [NO] TABS      Whether the terminal has settable tabs
  TTY [NO] BS        Whether the terminal can display rubouts
  TTY [NO] WAITS     Whether terminal can show control chars (WAITS graphics)
  TTY [NO] BOLD      Whether to reverse the line editor text's emphasis
  TTY [NO] ALTEMPHASIS Which emphasis form to use (3025s only so far)
  TTY [NO] ALTBELL   Which terminal bell form to use
  TTY [NO] HTOGGLE   (no-edit-key mode) Whether the holding char should toggle
  TTY [NO] EDIT      Whether terminal has EDIT key (controlling parity bit)
  NOEDIT             The terminal has no EDIT key

(The last command above, NOEDIT, is intended to be used if you accidentally get
marked as an EDIT display even though you don't have an EDIT key.  In that case
your parity bit will be taken as the EDIT key, making it very hard for you to
type commands.  The thing to do then is to type the NOEDIT command to get out of
that state (you probably can't type TTY NO EDIT, depending on what your parity
bit is doing).  The NOEDIT command works whether the terminal is generating
even, odd, mark, or space parity.)

You should also read the description of the TTY command in Section 3.2.  Some
non-display TTY keywords described there are also meaningful for displays.

In addition to the above, the monitor command

TTY NO <display type>

will tell the system to treat your terminal as a non-display.  Any display type
name can be used (from the display-type table above) no matter what your current
display type is.

The command

TTY TABS

will make the system simply reset your tab stops, but without redrawing any
text, in case the tab stops aren't set correctly for some reason.

Finally, the monitor command

TTY INITIALIZE

will make the system re-initialize your display, keeping the display type and
parameters that are already set up.  This is useful for resetting the display if
the terminal has glitched, been powered off and back on, etc.  TTY INITIALIZE
will simulate a BREAK P to clear the screen and redraw the page printer, as well
as re-initializing the terminal.
                     Login Options for Individual Displays


You can have the system automatically set your terminal's display type and
parameters when you log in.  This is done by putting login options on the line
beginning "LOGIN:" in your OPTION.TXT file; see the general description of login
options in Section 5.1.  There are four general forms of the display-type
setting login options.  They are:

        DISPLAY=<type>
        DISPLAY=<type>(<parameter value>,...,<parameter value>)
        FDISPLAY=<type>
        FDISPLAY=<type>(<parameter value>,...,<parameter value>)

where <type> can be any one of the official display types from the list above,
and any number of <parameter value>'s can be specified from the list below.  The
DISPLAY option will make your terminal a display no matter what terminal line
you log in on (unless of course you're on a DD or III), but the FDISPLAY option
will make you a display only if you are coming in on one of the Fast terminal
lines, namely the 1200/150 baud dialup lines and the LLL lines.

For any parameter not specified in the DISPLAY or FDISPLAY option, the default
value is used.  If conflicting parameter values are specified in the option, the
result is undefined.  If you don't specify any parameters at all, then you get
all the defaults for the given display type, and in this case you should omit
the parentheses that normally surround the parameter list.

Note: If your LOGIN option "line" is too long to fit on one line, you can use
any number of lines, but each line should end at (i.e., with) a comma.

Further note: LOGIN does not validate the display type you specify, it simply
hands the name to the system.  If the type is unrecognized by the system (e.g.,
because it is abbreviated to less than 6 characters), then the option will
effectively be ignored -- no warning will be issued.

Now here are the display parameters you can specify in the LOGIN display
options.

  Display parameter  Aspect determined

  HEIGHT=dd          decimal height in lines
  WIDTH=dd           decimal width, should be multiple of 8
  PADCHAR=ooo        octal code for padding character
  PADBAUD=dddd       decimal baud rate for padding calculations
  TABS               terminal has (fixed every 8 or settable) tabs
  NOTABS             terminal has no tabs
  EDIT               terminal has an EDIT key (controlling the parity bit)
  NOEDIT             terminal does not have an EDIT key
  HTOGGLE            (for NOEDIT mode) make holding character toggle holding
  NOHTOGGLE          (for NOEDIT mode) holding character never unholds
  NOQUOTE            (for NOEDIT mode) set terminal input to Normal mode
  QUOTE              (for NOEDIT mode) set terminal input to Quote mode
  ALLQUOTE           (for NOEDIT mode) set terminal input to All-Quote mode
  BS                 terminal can display rubout
  NOBS               terminal cannot display rubout
  WAITS              terminal can display control chars (WAITS graphics)
  NOWAITS            terminal cannot display control chars (WAITS graphics)
  BOLD               reverse the emphasis of text in the line editor
  NOBOLD             do not reverse line editor emphasis
  ALTEMPHASIS        use alternate form of emphasis (if any)
  NOALTEMPHASIS      use regular form of emphasis
  ALTBELL            use alternate form of bell (if any)
  NOALTBELL          use regular form of bell

Here are the current defaults for the current possible official display types,
given in the form of LOGIN options explicitly setting all relevant parameters.

  Individual Display Types and Their Default Parameters as Login Options

  DISPLAY=DM2500(HEIGHT=24,WIDTH=80,PADCHAR=1,PADBAUD=1200,TABS,EDIT,
                  BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=DM128(HEIGHT=24,WIDTH=80,PADCHAR=1,PADBAUD=1200,TABS,EDIT,
                  BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=DMWAITS(HEIGHT=24,WIDTH=80,TABS,EDIT,
                  BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)  ;never padded

  DISPLAY=DM3025(HEIGHT=24,WIDTH=80,TABS,EDIT,
                  BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)        ;never padded

  DISPLAY=C100A(HEIGHT=24,WIDTH=80,PADCHAR=15,PADBAUD=1200,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=C100B(HEIGHT=24,WIDTH=80,PADCHAR=15,PADBAUD=1200,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=TELERAY(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,EDIT
                  NOBS,NOWAITS,NOALTBELL)         ;no emphasis available

  DISPLAY=TELERB(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  NOBS,NOWAITS,NOALTBELL)         ;no emphasis available

  DISPLAY=HEATH19(HEIGHT=24,WIDTH=80,PADCHAR=0,PADBAUD=9600,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=HP2648A(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=1200,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
                                                  ;HP not currently padded

  DISPLAY=TELEVIDEO(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,
                  NOEDIT,HTOGGLE,NOQUOTE,
                  NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=AMBASSADOR(HEIGHT=48,WIDTH=80,PADCHAR=0,PADBAUD=9600,TABS,EDIT,
                  BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)

  DISPLAY=ALTOTALK(HEIGHT=24,WIDTH=80,PADCHAR=0,PADBAUD=0,TABS,EDIT
                  NOBS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
                       Special Notes on Various Displays


Here are some notes on idiosyncracies of various supported display terminals.

Output to DMWAITS and DM3025 displays is never padded.  However, these terminals
are known to lose during insert/delete line operations when running the WAITS
display service at 9600 baud.  Padding doesn't help, but makes it worse.

No emphasis is available on the Teleray terminals, and these terminals can only
display 96 distinct characters (from computer control), so the WAITS graphics
characters that occupy the octal codes from 001 to 037 are displayed as lower
case letters plus the characters "[\]↑←".  As a result, there is no way to tell
the difference (just by looking) between the pairs of characters (e.g., "a" and
"↓") that are displayed as the same graphic on Teleray displays.  Let the user
beware!

In certain cases, WAITS is not successful in obtaining the correct emphasis
(normal or reverse video) for text on HP2648A terminals.  Sometimes the line
editor, which should be reverse video, comes out as normal.  However, the
correct text IS displayed in the correct places on the screen -- only the
emphasis form is not always correct.  If this proves annoying, use TTY NO BOLD
to make the line editor use normal text.

The HP 2621 and the HP 2640 terminals are expected to work with the 2648A
support (TTY HP2648A), although for one or both of the former terminals it may
be necessary to say TTY NO TABS or to avoid running at baud rates above 1200
(currently no padding is used for HP terminals).

For C100 type terminals, the padding calculations are designed to work correctly
for 9600 baud.  However, because the calculations are linear but the C100's need
for padding isn't, lower actual baud rates specified may result in excess
padding (which is expensive at these low baud rates).  So if you are running at
1200 baud on a C100, you can get by with TTY PADBAUD 400; and if you are running
at 300 baud, you can probably get by with TTY PADBAUD 0.  These padding baud
rates can be specified in your LOGIN option, e.g., FDISPLAY=C100B(PADBAUD=400).

The Ann Arbor Ambassador, which has a variable screen size, is assumed already
to be set to a 48-line screen when initialized by the system.  To use a
different size screen, you must locally set the terminal to the desired size and
then inform the system of the size, e.g., with the command TTY AMBASSADOR 24 for
a 24-line screen.  An alternate emphasis form of reverse video is available with
the command TTY ALTEMPHASIS.
            Display Terminal Capabilities Required for WAITS Support


The WAITS display service can be readily extended to support additional display
types, provided any such new display has certain minimal capabilities.  If you
would like to see such a terminal supported by the WAITS display service, MAIL a
message saying so to SYS.

For the WAITS display service to be able to handle a particular terminal, the
terminal must be able to run in Full Duplex mode and should have the following
capabilities, all of which must be executable from the computer (i.e., remotely,
not just locally):

  1. Line insert and delete.
  2. Character insert and delete (within line).
  3. Erase to end of line.
  4. Arbitrary cursor positioning (at least relative, preferably absolute).
  5. Some mechanism for displaying any of 128 (actually 124 or so) distinct
     graphics in a single column; bold, reverse video, blinking (ugh), etc.,
     might be used to manage this if the terminal can only display, say, 96
     graphics (plus bold, etc.).  Actually, while desirable, this "requirement"
     has already been waived for certain terminals, so it is no longer required.

It would also be very useful for the terminal's keyboard to be able to
selectively generate the parity bit, as is done with the EDIT keys on
Datamedias; however, this is not necessary, as various NOEDIT displays are
currently supported.
                            2.11  EDIT-key Displays


An EDIT-key display is one that has an EDIT key which controls the parity bit of
each characters type.  The EDIT key is a shift-like key, which, if held down
while a character is typed, causes the character to be transmitted to the
computer with its parity bit on.  Since DD and III displays are able to control
two such extra bits on every character (with the CONTROL and META keys),
EDIT-key displays simulate the extra bit with a special escape character.  The
EDIT key itself is used to turn on the CONTROL bit directly, but the META bit is
generated on any character by preceding that character with the prefix character
EDIT-NUL.  Thus, to type CONTROL-META-x, one types EDIT-NUL and then EDIT-X; the
first keystroke gives the META, and the EDIT in the EDIT-x gives the CONTROL.

The character NUL (000) is used as the ESCAPE character on EDIT-key displays; so
to get ESC W, you type NUL W.  Three other characters are also interpreted
specially, namely ↑← (∨, octal 037) means HOLD or UNHOLD (suspend or resume
typeout); ↑C (β, octal 003) means CALL (stop program); and ↑↑ (≡, octal 036)
means CLEAR (clear the line editor).  To type any of these three characters
normally to a program (or to the monitor), you must quote the character with a
NUL (or with EDIT-NUL if you want to type META-x for x among ≡∨β).  To get a
deferred CALL, you type EDIT-↑C; and to get BREAK, you type NUL and then "-"
(minus sign).

To flush the output queues, type EDIT-↑↑ (also called EDIT-CLEAR, since ↑↑ is
CLEAR).

On a DM2500A with the SUMEX keyboard, there are single keys that send ↑←
(labelled HOLD), ↑C (labelled CALL), and ↑↑ (bottom blank key at keyboard left).
On other keyboards, these keys may have to be typed using the keyboard's ASCII
CTRL key.

For EDIT-key displays that have programmable function keys which cannot store
the EDIT (parity) bit, there are three escape commands available to allow such
programmable keys to set the CONTROL and/or META bits (which otherwise require
the EDIT bit).  These bucky-bit-adding escape commands are:

  ESC ↑    sets the CONTROL bit on the next character typed,
  ESC ~    sets the META bit on the next character typed, and
  ESC %    sets both CONTROL and META on the next character typed.

Thus ESC ↑ x generates CONTROL-x, ESC ~ y generates META-y, and ESC % z makes
CONTROL-META-z.  These three escape commands will automatically quote any
following character except NULL or EDIT-NULL while adding CONTROL and/or META.
In particular, ESC ↑ (say), followed by β (↑C, 003 octal, normally CALL) makes
CONTROL-β, not CONTROL-CALL; similarly the characters ≡ (normally CLEAR) and ∨
(normally HOLD) are automatically quoted by any of these three bucky-bit adding
escape commands.  The EDIT bit on the character following any of these three
escape commands is ignored, unless the character with the EDIT bit is NULL (see
next paragraph).

If the character following any of these three escapes is NULL (ESCAPE) or
EDIT-NULL (add META), then the ↑, ~, or % escape command is ignored and the NULL
or EDIT-NULL takes over (affecting the following character).  Thus ESC ↑ ESC P
is the same as ESC P, and ESC % EDIT-NULL x is the same as EDIT-NULL x.

The three escape characters ↑, ~ and % were chosen as slightly mnemonic for the
commands, like this: ↑ often represents ASCII control and here is used for WAITS
CONTROL; ~ almost looks like an M as in META; and % has two little circles, thus
representing double bucky, or CONTROL-META.  I know these aren't great
mnemonics, but they can be useful for remembering the commands, and anyway
usually only a program that is loading your 7-bit programmable function keys on
an EDIT-key display needs to remember these.  These three escape commands are
no-ops except on EDIT-key displays.  They don't work on DDs, IIIs, NOEDIT
displays or non-displays.

Now here is a summary of what you type to get certain effects on a display that
has an EDIT key.  To get a reference table like this printed on the XGP (for
taping to your keyboard), give the monitor command HELP EDKEY.

  To get          Type               Comments

  ESC             NUL                CTRL-@ generates NUL; NUL W gets you ESC W
  BREAK           NUL -              NUL then minus sign
  CONTROL-<char>  EDIT-<char>        Hold down EDIT while typing <char> (or use
                                     ESC ↑ <char>)
  META-<char>     EDIT-NUL <char>    Two keystrokes (or use ESC ~ <char>)
  META-CONTROL-<char>                EDIT-NUL EDIT-<char> Two keystrokes (or use
                                     ESC % <char>)
  undo ESC or BREAK                  DEL ESC DEL is a no-op
  undo META       NUL DEL            NUL takes over as ESC, and ESC DEL is a
                                     no-op
  CLEAR           CTRL-↑             On a DM2500A, the bottom unlabelled key at
                                     left (or MR)
  FORM            CTRL-L             On a DM2500A, use the ↑L key
  BS              DEL                Sometimes called RUBOUT
  ALT             ESC                This is altmode
  CALL            CTRL-C             On a DM2500A, use the CALL key
  deferred CALL   EDIT-CTRL-C        Or EDIT-CALL on a DM2500A
  suspend typeout CTRL-←             On a DM2500A, use the HOLD key.  This
                                     toggles holding.
  resume typeout  CTRL-←             On a DM2500A, use HOLD again
  suspend typeout NUL EDIT-<minus sign> This long form doesn't toggle.
  resume typeout  EDIT-CTRL-↑        Only on a DMWAITS display!  Others see next
                                     entry.
  flush queues    EDIT-CTRL-↑ or NUL 1 CR This flushes the output queues
                                     (EDIT-CLEAR on a DM2500A)
  β or ∨ or ≡     NUL <char>         Add EDIT to <char> (β or ∨ or ≡) to get
                                     CONTROL-<char>.  To get META-<char> or
                                     META-CONTROL-<char>, treat these three
                                     characters like any normal character and
                                     see above.

Note: The DMWAITS terminal (a DM3025 with a DD-like keyboard layout) is
technically considered an EDIT display, but the keyboard can be used almost
exactly like a DD keyboard, with none of the above special translations needed.
One additional piece of information needed is that to flush the display output
queues on a DMWAITS, you can type the PF1 key (which sends ESC 1 CR).  The other
PFn keys (from n=5 up) can be used for system character macros (see Section
2.13), since they transmit ESC n CR.
                             2.12  NOEDIT Displays


Now we'll explain how to use a display terminal that doesn't have an EDIT key,
that is, a NOEDIT display.

A local WAITS display keyboard generates 9-bit characters, including the CONTROL
and META bits, and ignoring for the moment special keys like ESC and CALL.  A
display with EDIT key generates 8-bit characters, so about half of all possible
characters can be entered with one keystroke, but META-characters require two
keystrokes.  A display without EDIT key, or any other standard ASCII terminal,
generates 7-bit characters, so only about one fourth of all WAITS characters can
be entered in one keystroke.  Any single choice of the single-keystroke subset
will make some kinds of typing very difficult, so several input modes are
provided for non-EDIT-key displays:

  1. In NORMAL mode, the standard ASCII graphic characters are single-keystroke,
     as are the line editor commands and the prefix codes needed to enter
     multi-keystroke characters.  (In other words, any character which is not
     single-keystroke is two-keystroke in this mode.)
  2. In QUOTE mode, almost all of the WAITS extended graphic character set is
     single-keystroke.  Line editor commands are two-keystroke, and other bucky
     bit characters are three-keystroke.  CALL and HOLD are still
     single-keystroke.
  3. In BUCKY-QUOTE modes, some combination of bucky bits is single-keystroke.
     Unmodified graphic characters are three-keystroke.  These modes are not
     likely to be used for long periods, but might be useful when typing a
     series of commands to E, for example.  There are three of these modes:
     CONTROL-QUOTE, META-QUOTE, and CONTROL-META-QUOTE.
  4. In ALL-QUOTE modes, not even CALL and HOLD are treated specially; all
     characters are quoted except a single ESCAPE code.  These modes (including
     three BUCKY-ALL-QUOTE modes) are not recommended except for programmable
     terminals which can easily provide arbitrary multiple-character sequences
     on function keys.

Whether one chooses to type normally in NORMAL mode or in QUOTE mode is a matter
of personal preference.  NORMAL mode probably requires fewer keystrokes for most
purposes, but QUOTE mode is more similar to EDIT-key typing and may therefore be
easier to remember.  QUOTE mode has the disadvantage of requiring some
three-keystroke sequences, but if your terminal has programmable function keys,
that disadvantage can be eliminated.
                     NORMAL mode for non-EDIT-key displays


In NORMAL mode for a display without an EDIT key, the ASCII control characters
(0-37 octal, denoted as ↑@, ↑A, ↑B, etc.) are used for line editor commands and
for bucky-bit prefixing and other special functions.  The intent is to make line
editor commands as easy as possible to type.  Each control character has a
standard meaning; certain ones can be redefined as an arbitrary character macro
to accomodate differences among keyboards.  The following table shows the NORMAL
mode meanings of all the ASCII control characters, along with their DD/III
equivalents.  The asterisk, *, marks a redefinable character; among the things
these chars can be is the ESCAPE character (defaulted to ↑@).  The system
program CHRMAC is used to redefine characters as macros (type R CHRMAC).  To get
a reference table like that below printed on the XGP (for taping to your
keyboard), give the monitor command HELP NOEKEY.

           Data Disc
    Char   Equivalent     NORMAL mode NOEDIT meaning

  * ↑@     ESC            ESCAPE
    ↑A     αFORM          beginning of line
    ↑B     αB             backward search
    ↑C     CALL           CALL
    ↑D     αD             delete forward
    ↑E     αI             enter insert mode
    ↑F     αSPACE         forward cursor
    ↑G     αBREAK         HOLD
  * ↑H     αBS            backward cursor
  * ↑I     TAB            tab
  * ↑J     LF             linefeed
  * ↑K     VT             vertical tab
  * ↑L     FORM           formfeed
    ↑M     RETURN         carriage return
    ↑N     (none)         numeric arg (see below)
    ↑O     αRETURN        recall old line
    ↑P     (none)         quote with CONTROL (see below)
  * ↑Q     (none)         quote without buckies (see below)
    ↑R     αR             repeat search or kill
  * ↑S     αS             search
    ↑T     αT             transpose
    ↑U     CLEAR          CLEAR
    ↑V     (none)         quote with META (see below)
    ↑W     (none)         quote with CONTROL-META (see below)
    ↑X     αK             kill (eXpunge)
    ↑Y     αL             backward kill
    ↑Z     αTAB           end of line
  * ↑[     ALT            altmode
  * ↑\     (none)         flush output queues
  * ↑]     (none)         undefined
  * ↑↑     (none)         undefined
  * ↑←     (none)         undefined

  (* means redefinable as a macro)

The DELETE or RUBOUT key does a delete backward, like βBS.  On NOEDIT displays,
there is no single key which does βBS at the end of a line and αBS inside the
line.

The ESCAPE character performs the usual WAITS ESCAPE commands as on local
(DD/III) display terminals.  (In QUOTE mode, described later, the ESCAPE
character is used both for the usual ESCAPE commands and for additional
functions unique to no-EDIT-key displays.)

The control characters with a DD/III equivalent are translated to that
equivalent on input.  Therefore, under some special activation conditions they
will not perform the editing function indicated but will be read by user
programs.  Note that none of the ASCII format effectors are used as line editor
commands, but those characters are redefinable.  A user whose keyboard has, say,
a VT key might choose to redefine that key to mean something normally harder to
type, e.g., flush output queues.  The cost of that redefinition is that an
actual VT could be entered only by quoting.

↑N is used to precede a numeric argument.  Specifically, any number of digits
including + and - will be controllified (i.e., get the CONTROL bit added) up to
and not including the first nondigit.  Thus, the equivalent of α2α3αD is ↑N23↑D.

There are four quoting characters: ↑Q, ↑P, ↑V, and ↑W.  Each of these causes the
following (7-bit) character typed to be quoted and given one of four possible
bucky bit values.  ↑Q (mnemonic for Quote) quotes with no bucky bits.  ↑W
(mnemonic for DOUBLEyou) quotes with control-meta.  The others aren't very
mnemonic, unfortunately, but they quote with CONTROL (↑P) and with META (↑V).
So, for example, β (a real beta) is typed ↑Q↑C.

The only way to undo a quoting character is to type NULL (↑@), which is an
invalid character when quoted.  Since all other ASCII characters are quotable,
none can be used to undo a ↑Q etc.

The HOLD character (↑G) can be used in two modes.  The default mode is that the
same code toggles holding and unholding, like the HOLD key on an EDIT-key
display.  This is called HTOGGLE mode.  That mode is most convenient for local
users with fast echo, who should never have trouble knowing whether or not they
are holding.  Network users with greater echo delays may prefer NO HTOGGLE mode,
in which the ↑G character always means HOLD, and another character sequence
(ESCAPE ↑G) must be used for unhold.  The monitor command TTY [NO] HTOGGLE
selects the holding mode.

The following special functions are normally done by two-character escape
sequences:

   Function desired   What you think        What you type

   deferred CALL      ESC CALL              ↑@↑C
   unhold             ESC HOLD              ↑@↑G    (in NO HTOGGLE mode)
                      QUOTE mode for non-EDIT-key displays


In QUOTE mode, almost all of the ASCII control codes (0-37 octal) are
automatically quoted and therefore are used to represent the extended WAITS
graphics.  The exceptions are the following three characters reserved for
special purposes: ESCAPE, CALL, and HOLD.  These three characters are treated
the same in QUOTE mode as in NORMAL mode: the CALL and HOLD characters are ↑C
and ↑G, and the ESCAPE character defaults to NULL (↑@) but other ESCAPE
characters can be defined.

All special functions other than CALL and HOLD are entered with a sequence of
characters starting with ESCAPE.  In general, ESCAPE followed by an ASCII
control character has the effect that the control character alone would have in
NORMAL mode.  For example, ESCAPE ↑S is the line editor search command.  The way
to enter arbitrary bucky-bit characters is the three-keystroke sequence
ESCAPE QUOTER CHAR, where the QUOTERs here are the same as in normal mode: ↑Q,
↑P (CONTROL), ↑V (META) and ↑W (CONTROL-META).  E.g., ESCAPE ↑V X is META-X.

The sequence ESCAPE ESCAPE is equivalent to ESCAPE.  The sequence ESCAPE CALL is
a quoted ↑C, i.e., a beta (β); similarly, ESCAPE HOLD is a quoted ↑G or pi (π).
If you are using an ESCAPE character other than NULL, the underlying graphic
character can be entered with ESCAPE ↑Q ESCAPE, e.g., if you have set up ↑↑ (≡)
as an ESCAPE character, then ↑↑ ↑Q ↑↑ is the way to type ≡ to a program.

The only remaining problem is that the special meaning of ESCAPE applied to
ASCII control codes overrides the usual WAITS escape commands.  So far the only
command affected is ESCAPE FORM to clear the page printer.  When you type ESCAPE
FORM on a QUOTE-mode display, you simply get a FORM character, unless that
character has been redefined.  (If FORM has been redefined, then in QUOTE mode,
just FORM gets you a plain FORM and ESCAPE FORM gets you the redefinition.)  To
enter the system ESCAPE FORM command, a QUOTE-mode display user must type
ESCAPE " FORM.  If other escape commands are defined for below-40 characters,
the same mechanism will be used to enter such commands from QUOTE mode.  The
WAITS escape command ESCAPE n CR, which expands a macro (n is a number), is an
exception in that it does NOT need the " character (since CR is never allowed to
mean anything but CR).  So ESCAPE n CR does work to expand a character macro
(ESCAPE n " CR does the same thing) even on a quote-mode noedit display.

The ESCAPE " mechanism is also used to enter the functions deferred CALL and
unhold, which in NORMAL mode are typed ESCAPE CALL and ESCAPE HOLD.  In QUOTE
mode you must type ESCAPE " CALL for deferred call and ESCAPE " HOLD for unhold,
since ESCAPE CALL is β and ESCAPE HOLD is π.

Here are some examples of typed character sequences; this table compares what
you need to type to get particular effects in NORMAL and QUOTE modes.

                         What you type             What you type
  DD/III equivalent      in NORMAL mode            in QUOTE mode

  CALL                   ↑C                        ↑C
  E                      E                         E
  ε (epsilon)            ↑Q ↑F                     ↑F
  αε (CONTROL-ε)         ↑P ↑F                     ESCAPE ↑P ↑F
  α<SP> (cursor forward) ↑F                        ESCAPE ↑F  or  ESCAPE ↑P <SP>
  α<CALL> (deferred)     ESCAPE ↑C                 ESCAPE " ↑C
  β (beta)               ↑Q ↑C                     ESCAPE ↑C
  α<BREAK> (hold)        ↑G                        ↑G
  α<CLEAR> (unhold)      ESCAPE ↑G (if not HToggle)ESCAPE " ↑G (if not HToggle)
  α<CLEAR> (unhold)      ↑G (if HToggle)           ↑G (if HToggle)


Below are some more examples, this time comparing the Normal and Quote mode
interpretations of given typed strings.

                         Meaning in                Meaning in
  What you type          NORMAL mode               QUOTE mode

  ↑C                     CALL                      CALL
  ESCAPE ESCAPE          ESCAPE                    ESCAPE
  E                      E                         E
  ↑V E                   βE (META-E)               ⊗ E (circle-x and then E)
  ESCAPE ↑V E            ESCAPE βE (useless)       βE (META-E)
  ↑B                     backsearch                α (alpha)
  ↑P                     adds CONTROL to next char ⊂ (subset)
  ESCAPE ↑B              ESCAPE αB (useless)       backsearch
  ESCAPE ↑P              (wait for next char)      adds CONTROL to next char
  ESCAPE ↑P X            ESCAPE αX (useless)       αX (CONTROL-X)
  ESCAPE ↑C              deferred CALL             β (beta)
  ESCAPE " ↑C            deferred CALL             deferred CALL
  FORM                   FORM (*)                  FORM
  ESCAPE FORM            ESCAPE FORM (*)           FORM (*)
  ESCAPE " FORM          ESCAPE FORM               ESCAPE FORM
  ESCAPE ↑Q FORM         ESCAPE FORM               FORM
  ESCAPE ↑G              unhold                    π (pi)
  ESCAPE " ↑G            unhold                    unhold

  (*) means that the meaning may be different if FORM is redefined.
                               BUCKY-QUOTE modes


The BUCKY-QUOTE modes are just like QUOTE mode, except that an ordinary
character gets the CONTROL and/or META bits automatically.  For example, if you
are in META-QUOTE mode, just typing X gets you META-X; to get a plain X you must
type ESCAPE ↑Q X.

Typing ESCAPE temporarily suspends the automatic bucky bits, so ESCAPE W means
simply ESCAPE W and not ESCAPE META-W even in META-QUOTE mode.  This is
important only for the extended escape commands like ESC [ prg αW, which can be
typed ESCAPE [ prg ↑P W in any no-EDIT-key mode!

The special characters CALL and HOLD get the automatic bucky bits when quoted
with ESCAPE.  For example, in META-QUOTE mode, ESCAPE ↑C is META-β.  As in
non-bucky QUOTE mode, an ESCAPE character itself can be quoted only by
explicitly specifying the desired bits, e.g., ESCAPE ↑V ESCAPE is the way to get
the ESCAPE character with the META bit in any of the QUOTE modes.
                                ALL-QUOTE modes


Users of programmable terminals may want to have every ASCII control code be
interpreted as a WAITS graphic, not even excepting ↑C and ↑G, which are normally
interpreted as CALL and HOLD even in the four QUOTE modes.  CALL and HOLD are
important enough to be typeable with a single keystroke, but a programmable
terminal allows one keystroke to send multiple characters to the computer.
ALL-QUOTE modes (ALL-QUOTE, CONTROL-ALL-QUOTE, META-ALL-QUOTE, and
CONTROL-META-ALL-QUOTE) are provided for these terminals.

The only difference between an ALL-QUOTE mode and the corresponding QUOTE mode
is that in ALL-QUOTE modes ↑C and ↑G are treated like any other ASCII control.
The following table summarizes the differences:

                   What you type        What you type
   Function        in QUOTE mode        in ALL-QUOTE mode

   CALL            ↑C                   ESCAPE ↑C
   deferred CALL   ESCAPE " ↑C          ESCAPE " ↑C
   β (beta) (*)    ESCAPE ↑C            ↑C
   hold (**)       ↑G                   ESCAPE ↑G
   unhold          ESCAPE " ↑G          ESCAPE " ↑G
   π (pi) (*)      ESCAPE ↑G            ↑G

(*) In a BUCKY-ALL-QUOTE mode, ↑C and ↑G represent BUCKY-β and BUCKY-π, like
other characters in BUCKY-QUOTE modes.

(**) Or toggling hold/unhold if in TTY HTOGGLE mode.

The ESCAPE character (normally NULL, ↑@) is not quoted even in ALL-QUOTE mode,
since it is necessary to begin the multi-keystroke sequences.  If you have more
than one ESCAPE character because of macro redefinition, all of your ESCAPE
characters are unquoted.
                                Switching modes


Depending on the initial display type you specify to the system, you may start
out in either EDIT mode or NOEDIT normal mode (e.g., Datamedias are assumed to
have an EDIT key).  You can switch modes at any time, once you are a display, by
using the ESCAPE ' (single-quote) command, as follows:

  ESCAPE '    enter NORMAL no-EDIT mode
  ESCAPE 0 '  enter QUOTE no-EDIT mode
  ESCAPE 1 '  enter CONTROL-QUOTE no-EDIT mode
  ESCAPE 2 '  enter META-QUOTE no-EDIT mode
  ESCAPE 3 '  enter CONTROL-META-QUOTE no-EDIT mode
  BREAK '     enter EDIT key mode
  BREAK 100 ' enter ALL-QUOTE no-EDIT mode
  BREAK 101 ' enter CONTROL-ALL-QUOTE no-EDIT mode
  BREAK 102 ' enter META-ALL-QUOTE no-EDIT mode
  BREAK 103 ' enter CONTROL-META-ALL-QUOTE no-EDIT mode

(The ALL-QUOTE sequences are chosen to be hard to type accidentally, since they
will normally be done only by programmable function keys on intelligent
terminals.  However, if you are already in an ALL-QUOTE mode, you can shift to
another ALL-QUOTE mode with a single-digit argument to the BREAK n ' command.)

Now, the only problem is, what if your keyboard can't type NULL, which is the
default ESCAPE character in NOEDIT mode?  (It is the only ESCAPE character in
EDIT mode!) You use these monitor commands:

  NOEDIT             enter NORMAL no-EDIT mode
  TTY SETESC nn      make the character with octal code nn an ESCAPE

You must be a display to give the NOEDIT command, and a NOEDIT display to give
the TTY SETESC nn command.  Once you have established an ESCAPE command which
you can type, you can use ESCAPE ' to adjust your mode further.

The TTY SETESC command without an argument will type out all of your currently
defined ESCAPE characters.

The TTY [NO] HTOGGLE command sets [clears] the mode in which ↑G toggles holding
instead of always entering holding.  That mode is orthogonal to NORMAL vs QUOTE,
but it does not survive TTY EDIT (or BREAK ') mode, where only toggling is
available.  TTY HTOGGLE is the default.

Restoring EDIT mode (e.g., with TTY EDIT) undoes any NOEDIT character
redefinitions you have done, so a later NOEDIT command will give you the default
meanings for all characters.
                     Redefining the redefinable characters


For the special case of redefining a character to be an ESCAPE, there is the TTY
SETESC command described above.  Other redefinitions must be done by UUO.  You
can redefine a character into any sequence of up to 18 (decimal) WAITS
characters.

If you have created another ESCAPE character by redefinition, you can then
redefine NULL (↑@), which is the default ESCAPE.  However, you are not allowed
to redefine your only ESCAPE character (otherwise you would be left without an
ESCAPE character).

In general, the characters used in the macro definition are full 9-bit WAITS
characters or escape codes, as typed at a local display keyboard.  Therefore,
within the definition, the multi-character sequences are not used.  However, the
macro definition may contain special codes equivalent to the four quoting
sequences with and without bucky bits; these codes are meaningful only as the
last byte of a definition, to cause the next character actually typed on the
keyboard to be quoted.

The CHRMAC program (monitor command R CHRMAC) can be used to set up character
redefinitions.  It will also save all of your redefinitions in a file so that
you can easily set up your terminal the way you want it; for having this done
automatically when you log in, see the LOGIN program and the CHRMAC option, in
Section 5.1.  The CHRMAC program, which can also type out your redefinitions,
documents itself.
                          What QUOTE mode is good for


QUOTE mode is useful for people who type a lot of the extended WAITS characters
(e.g., ∀∃≤≥αβελ) or who don't want to have to learn a whole new set of line
editor commands (like ↑E for Enter insert mode).  In QUOTE mode, almost any of
the extended WAITS characters can be typed in one keystroke, and any line editor
command or bucky bit character can be typed with one of only a few special
character sequences:

  ESCAPE ↑P          means add CONTROL bit to next char
  ESCAPE ↑V          means add META bit to next char
  ESCAPE ↑W          means add CONTROL and META bits to next char

Thus the line editor command αS could be typed as ESCAPE ↑P S.  Of course,
someone who wanted to save a keystroke by learning all (or some of) the Normal
mode special functions of control chars could type αS as ESCAPE ↑S.  So this
mode works both for people with good memories and for people who like to
simplify their lives.

Both of these users still have to know these two commands too, plus what their
escape character is:

  CALL     ↑C
  HOLD     ↑G

Now, one more good use of QUOTE mode is with a display that has programmable
keys.  The programmable keys could be set up to send all the common commands,
especially the buckifiers (that add CONTROL and/or META) listed above (ESC ↑P,
ESC ↑V and ESC ↑W), and then the user could type all the special WAITS graphics
(↓αβ∧¬...) directly using their normal ascii-control representations, with only
one keystroke needed per such character, and only two keystrokes for bucky-bit
characters.

If you have a programmable terminal, you may even benefit from ALL-QUOTE mode,
in which even ↑C and ↑G are quoted, and even CALL and HOLD are multi-character
sequences.

On the other hand, if you don't have a programmable terminal, the advantage of
learning the NORMAL mode version of the line editor commands is that any DD/III
character can be typed with at most two keystrokes, and the most common require
only one.  Also, you avoid having to think about ESC " which is needed in QUOTE
mode.
                          2.13  Terminal Input Macros


There are terminal input macros available on all terminals.  Such macros make it
possible to type a short string of characters (possibly one character) to get
the effect of typing many characters.

    Note: Many programs provide for defining macros within the program.  The
    macros described here have nothing to do with such program-defined macros.
    The definitions of macros described here are maintained by the system and
    are available to the terminal user no matter what program is being run
    (except see next paragraph).

    Further note: No macros can be called from a terminal that is open in image
    mode, since all input from such a terminal goes uninterpreted to the job
    owning the terminal.  In general, no escape commands can be entered from an
    image mode terminal, for the same reason.

There are two types of macros available: the ESC n CR macro and the
NOEDIT-display macro.  The CHRMAC and GETMAC UUOs are used for defining and
returning definitions of both types of macros.

The system program CHRMAC has general utility functions for defining and reading
macros, including storing and retrieving definitions from disk files and copying
definitions from other terminals.  The CHRMAC program documents itself (type
R CHRMAC to run it).

    An ESC n CR macro is called by typing ESC n CR on a display or ↑← n CR on a
    non-display, where n is a decimal number within the allowed range of numbers
    (currently 5 to 20 inclusive) and CR is a carriage return.  Some terminals
    are or can be programmed to transmit the sequence ESC n CR when a single key
    is depressed.  In particular, there are 21 such pre-programmed keys on the
    DM 3025s with the WAITS keyboard (TTY DMWAITS), including the PFn keys at
    the top of the keyboard.  ESC n CR macros are available from any terminal,
    including PTYs.  (Note: Any ESC n CR command where the number n is outside
    the allowed range for macros, is reserved by the system for use in entering
    special commands.)

    A NOEDIT macro is called by typing the single character that is defined as a
    macro.  Such macros are available only for terminals known to the system to
    be NOEDIT displays.  ("NOEDIT" refers to the fact that such terminals have
    no EDIT key.  Most Datamedias do have an EDIT key, which simplifies typing
    9-bit characters to the system.  For a system-supported display that does
    NOT have an EDIT key, NOEDIT macros are available, again for simplifying
    typing of 9-bit characters.)  For more details on definable NOEDIT macros,
    see Section 2.12.

Either kind of macro can be defined as an arbitrary string of text to appear as
if typed from the terminal.  The length of any single macro definition is
limited, currently to no more than 18 (decimal) characters.  Also, the total
string length for all macros defined for a single physical terminal is limited,
currently to 192 (decimal) characters.  The string for a definition is
represented in the form in which it would be typed on a Data Disc terminal, and
therefore normally does not include any special multiple character sequences
(used on EDIT and NOEDIT displays to input a single character).  Among the
sequences that will not work inside a macro are commands of the form
ESC " <char> on NOEDIT displays; the desired function should be programmed into
the macro definition instead.  However, it is permissible and useful to end a
macro on a NOEDIT display with ESC " (leaving the <char> after the quote to be
typed manually) or with one of the NOEDIT commands that causes the next
character typed to be quoted (with some combination of CONTROL and/or META
bits).  Thus a macro (of either kind) can be used to cause quoting of the next
(manually-typed) character on a NOEDIT display.

Macros are not allowed to call other macros.  By virtue of the representation
used for macros, it is impossible to define a macro that attempts to call a
NOEDIT macro.  It is possible to define a macro that attempts to call an
ESC n CR macro (simply by including the string ESC n CR in the definition), but
such a macro call from within a macro is a no-op.  It is ignored.  Also, because
of the timing, a macro that does something like BREAK . TIME<CR>ESC . will not
work.

Macro definitions apply to the physical terminal for which they are defined.
For DD terminals, this means the macro definitions go with the keyboard, not
with any line that the keyboard may be mapped to at a given moment.  However,
this does not prevent the macro definition from typing text at the currently
mapped-to terminal; that is indeed expected to be a common usage.  However, the
association of macro definitions with the physical terminal means that mapping
commands themselves can be included in macros, as can audio switch commands, for
instance.  Macro definitions can include essentially anything that you can type
from the terminal (except for macro-calling commands).

Macro definitions go away when the terminal for which they are defined "goes
available" (e.g., 15 seconds after logout).  However, for Data Disc terminals,
the ESC n CR macros defined for a DD keyboard go away only when the last logical
line that that keyboard is responsible for goes available.

Macro definitions can include ESCAPE commands (including audio and video switch
commands on Data Discs).  However, ESCAPE commands executed from inside a macro
do not affect the saved ESCAPE command and argument that are used and/or
incremented by the ESCAPE/BREAK */+ commands.  Thus, if you type ESC 10 CR
followed immediately by ESC *, then the ESC * will repeat the ESC 10 CR command
even if one or more ESCAPE commands (e.g., ESC 12 U) were executed by the macro.

ESCAPE commands to be included in macro definitions should be in a form
appropriate for the terminal involved.  In particular, ESCAPE commands on
non-displays should use the non-display escape character ↑← rather than the
display escape character ESCAPE.
                            3  NON-DISPLAY TERMINALS


Any terminal other than a Data Disc, III, or known individual display is
considered a non-display whether or not it uses a display screen for its output.
A non-display cannot use the special display facilities described in the
preceding sections, such as the line editor and wholines.  However, some of
those facilities are approximated by special commands for non-display terminals.

The CTRL (control) key on a non-display does not produce the same codes as
CONTROL on a Data Disc.  Instead, it produces codes which, on DD terminals,
represent some of the TOP characters.  Most programs which deal with
non-displays, however, either cleverly use only characters which are the same on
all terminals, or have special notations for use at non-displays.  In
particular, there is an SOS representation (named after a non-display editor)
for printing characters not found on non-displays, namely a question mark
followed by some other character.  See Appendix 10.  The CTRL key generally
subtracts 100 octal from the corresponding upper case letter, e.g., CTRL-D is
004 octal, 100 less than D, octal 104.  Non-display control characters are
usually echoed as uparrow (or circumflex on some terminals) followed by the
corresponding non-control character, e.g., ↑D for CTRL-D.

There are a few cases in which the same graphic character is represented by
different codes in standard ASCII and in the WAITS extended character set.
Since non-displays have standard ASCII characters, these codes are converted on
input and output.  Here are the converted codes:

char      WAITS    ↔   external

  ~          32    ↔    176
  }         176    ↔    175
 ALT        175    ↔     33
  ≠          33    →     33
 EOF        612    ←     32

To get the effect of CALL, type CTRL-C twice.  (Now you know why CALL on
displays prints ↑C.)  Deferred CALL is a single CTRL-C.

Although there are several models of non-display terminal, some do not have
lower case letters.  The SHIFT key on these terminals, like the TOP key on our
displays, produces non-alphanumeric printing characters.  Most of these are
labelled on the keys, but you may not find [ (SHIFT-K), \ (SHIFT-L), or ]
(SHIFT-M) labelled on some models.

There is no line editor on non-displays.  You can delete the last character on a
line by typing RUBOUT, which prints a backslash and then the deleted character.
Successive RUBOUTs will print the characters deleted, until a non-RUBOUT, which
prints another backslash and then whatever you typed.  CTRL-U will delete the
entire line, like CLEAR on a display.  (There are some non-display escape
sequences for deleting more than just the last single character.  These are
discussed in the next subsection.)

If your terminal is actually a display, even though not one supported by WAITS,
and is capable of deleting a character from the screen in response to the output
sequence backspace-space-backspace, you can get the system to use that method of
indicating deletions, rather than the backslash notation, by using the TTY GLASS
command described below.  Such a terminal is called a glass TTY.

The end-of-file character for non-displays is CTRL-Z.  If your program does
input by TTYUUO, CTRL-Z is converted to 612 (the code for CONTROL-META-LINE,
which is the display end-of-file character).  TAB is typed as CTRL-I.  FORM is
CTRL-L, and VT is CTRL-K.  RETURN, LINE, and ALT have corresponding non-display
keys.  (The key for ALT may be labelled ALT MODE, ESCAPE, or PREFIX depending on
when the terminal was built; if none of these appears, type CTRL-[ to get ALT.)

To temporarily suspend typeout, use CTRL-S; and to resume typeout, use CTRL-Q.
CTRL-O flushes typeout like ESC O on a display.  A second CTRL-O resumes typeout
like BREAK O.
                        3.1  Non-display ESCAPE commands


The character ↑← (octal 37, ASCII CTRL-underscore, or CTRL-leftarrow or
CTRL-slash on some keyboards) is used as a prefix for special commands, like ESC
on a display.  The ↑← character is not echoed.  The following non-display escape
commands are defined:

  ↑← ↑C    send a β (beta, ↑C) to input buffer
  ↑← ↑O    send a ∂ (partial-sign, ↑O) to input buffer
  ↑← ↑Q    send a ⊃ (set-containment, ↑Q) to input buffer
  ↑← ↑S    send a ∪ (set-union, ↑S) to input buffer
  ↑← ↑U    send a ∃ (there-exists, ↑U) to input buffer
  ↑← ↑Z    send a ≠ (not-equal) to input buffer
  ↑← ↑←    send an ∨ (or-sign, ↑←) to input buffer

  ↑← -     negate arg for following command
  ↑← 0:9   decimal arg for following command

  ↑← ↑W    delete the last word on the input line
  ↑← C     add CONTROL (200) bit to the next character
  ↑← D     add Double-bucky (CONTROL-META, 600) bits to the next character
  ↑← F     full character set
  ↑← H     hide terminal
  ↑← I     interrupt program
  ↑← L     delete back to next character typed
  ↑← M     add META (400) bit to the next character
  ↑← N     No-op, but undo pending bucky bits
  ↑← R     redraw the current input line
  ↑← V     force a FILES command
  ↑← W     force a TTY WHO command
  ↑← X     diddle XTIME, like ESC X on display
  ↑← Z     enable automatic beeping, like ESC Z on display
  ↑← .     put terminal into monitor mode
  ↑← n CR  call a terminal input macro

Lower case letters are the same as upper case.  Undefined commands are echoed as
a bell and otherwise ignored.

The first set of special commands are used to "quote" characters which normally
have special meanings on a non-display terminal, namely, ↑C (call), ↑O (suppress
output), ↑Q (unhold), ↑S (hold), ↑U (clear input), ↑Z (end of file), and ↑←
itself.  The corresponding WAITS characters are β (003, ↑C), ∂ (017, ↑O), ⊃
(021, ↑Q), ∪ (023, ↑S), ∃ (025, ↑U), ≠ (033, represented by ↑← ↑Z), and ∨ (037,
↑←).

The digits and minus sign are used to create an argument to a following command,
as for ESC on a display.  Minus sign is like BREAK on a display.  For example,
↑← F turns on full character set mode, and ↑← - F turns it off.  The digits or
minus sign are typed between the ↑← and the command character, e.g., ↑← - 2 7 W.

The ↑← ↑W (word delete) command is like a succession of rubouts; it deletes
characters until the first (rightmost) letter or digit, then deletes until the
first character which is not a letter or digit, not including that character.
The deletions will be echoed with the backslash notation or by erasing the
characters deleted depending on the TTY GLASS bit.  ↑← n ↑W deletes n words.

The commands ↑← C, ↑← D, and ↑← M can be used to type a character with the WAITS
CONTROL and META bits into your program.  C stands for Control, M for Meta, and
D for Double-bucky (CONTROL and META).  You can also say ↑←C↑←M instead of ↑←D.
These commands echo as [C] [M] or [D].  The bits are applied to the next
character you type, even if it is a character that would normally have to be
quoted to be input (such as β (↑C)), unless that character is the special
character ↑← itself, which still must be quoted (by itself) even in this case.
If you change your mind, ↑← N will restore the No bucky bit state.

The commands ↑← F, ↑← H, ↑← I, ↑← X, ↑← Z, ↑← ., and ↑← n CR are the non-display
equivalents of the corresponding display ESC commands for those charaters: F
sets the full character set bit, H sets the hidden bit, I interrupts your
program, X diddles wholine incremental runtime, Z enables automatic beeping,  . 
puts your terminal into monitor mode, and ↑← n CR is used to call a macro (see
Section 2.13).  Type a minus sign after the ↑← and before the command character
to invert the sense of the command, e.g., ↑← - H unhides your terminal and
↑← - . puts your terminal into user mode.  The I, X,  ., and CR escape commands
accept numeric arguments with the same meanings as in the corresponding ESC
commands, which see.

The ↑← R command echoes a carriage return and line feed and then retypes the
text in the current input line; it is useful if the line is full of deletions
and you have trouble reading it.

The ↑← W command types out your job's wholine on the terminal.  ↑← n W types job
n's wholine, and ↑← - n W types the wholine for the job using TTYn.  ↑← 0 W
types the system wholine.

↑← N (stands for No-op) does nothing, except that if bucky bits have been set by
↑←C, etc., it will echo as [N] and forget the bucky bits.  It is also good for
cancelling a ↑← command you've started typing.

↑← n V does a FILES command for job n (your own job if no argument) without
having to stop your program.  See page 52.  ↑← - n V does a FILES command for
the job using TTYn.

↑← L followed by a character deletes back to that character, like CONTROL-L on a
display.  ↑← n L char will do it n times, like CONTROL-n CONTROL-L char.
                              3.2  The TTY Command


The TTY command provides some of the ESC facilities for non-displays along with
some other control features.  It takes as argument a keyword specifying the
thing to change.  As in typing monitor commands, only enough letters of the
keyword as necessary to make it unique need be typed.  The keyword may be
preceded by NO or - to reset the corresponding switch, e.g., TTY NO TABS or
TTY-TABS.  The TTY command is legal from displays as well as non-displays, but
the keywords ARROW, CONVERT, DELETE, ECHO, FILL, GLASS, and WIDTH have no effect
on display terminals.  The TABS keyword has no effect on DDs or IIIs.  The
keyword WIDTH also has no effect on PTYs which are not network PTYs.  You need
not be logged in to give the TTY command, except for the keywords UPDATE and
TIME.  (Additional TTY command keywords for individual display terminals are
described in Section 2.10.)

A command of the form TTY TTYn keyword will cause the effect of a TTY keyword
command for TTYn instead of your own TTY.  This command is allowed only if the
target TTY is not in use, or is owned by your job, or if you have the DEV
privilege (see Section 6).

Here are the non-display keywords and their meanings (as noted above, some of
these apply to displays as well):

  ARROW    Causes character codes less than 40 octal to be echoed as
           uparrow-letter (e.g., ↑A for octal 001) rather than as the code
           itself, except for BEL (7), TAB (11), LF (12), VT (13), FF (14), and
           CR (15).
  BEEP     Enables automatic beeping after long computations, like ESC Z on a
           display.
  BREAK n xSame as typing BREAK n x on a display (where x is a command letter
           and n is an optional number).  On a non-display, this works only for
           these command letters: F, H, I, V, X, and Z.
  CONVERT  Enables the WAITS-ASCII character conversions mentioned on page 43.
           This is the default state except for PTYs, but can be turned off with
           TTY NO CONVERT.  This mode is ignored for PTYs; network PTYs always
           get conversion, and non-network PTYs never do.
  DELETE   Disables the interchanging of the two input characters 177 and 010
           (WAITS and ASCII backspaces, respectively).  The command TTY NO
           DELETE, given from a non-display, will make the system interchange
           these two input characters.  TTY DELETE is the default.  The purpose
           of NO DELETE is to allow the user to enter backspaces by using an
           ASCII backspace key instead of a DELETE key (since on some terminals
           the DELETE or RUBOUT key is not conveniently located).  In NO DELETE
           mode, to enter a DELETE (177) (e.g., to backspace over a character in
           the input line), type a ↑H (i.e., ASCII backspace--010), and to input
           the character ↑H (lambda on WAITS--010) type a real DELETE character
           (i.e., RUBOUT--177).  NO DELETE mode has no effect on non-network
           PTYs or displays.
  ECHO     Tells the monitor to send back to the terminal the characters you
           type in.  TTY NO ECHO can be used if your non-display itself always
           prints each character you type (this is sometime called half-duplex).
  ESCAPE n x Same as typing ESC n x on a display (where x is a command letter
           and n is an optional number).  On a non-display, this works only for
           these command letters: F, H, I, V, X, and Z.
  EXIST n  (For wizards) Turns particular terminal lines on or off.  Lines are
           turned off to prevent them from interrupting the computer and wasting
           its time when no terminals are connected to the given lines.  Turning
           a line on resets it to its default baud rate.  TTY EXIST with no
           arguments merely lists the lines that are currently on.  DD and III
           lines are automatically turned on and off by the system when it
           notices whether a keyboard is plugged in.
  FILL     Tells the monitor to insert extra carriage returns when a return is
           typed out at the terminal, to give the carriage time to return to the
           left margin.  This is used principally for 30 character per second
           terminals.
  FULL     Declares that the terminal has lower case letters, and lower case
           should not be converted to upper case by the monitor.  Equivalent to
           ESC F on a display; NO FULL is like BREAK F.
  GAG      Don't allow messages from other users to be typed out.  This is the
           default for non-network PTYs.
  GLASS    Echo rubout as backspace-space-backspace instead of using the
           backslash notation for deleted characters.
  HANG     Hang up the phone line associated with the TTY.  This is meant to be
           used for some TTY other than your own.
  HIDE     Hides your terminal, to keep other people from spying on you,
           although this can be overridden.  See the ESC H command on page 18.
  SPEED n  Sets the baud rate of the indicated terminal to the given speed.
           E.g., TTY TTY37 SPEED 300 sets TTY37 to 300 baud.  The baud rate must
           be one that the given scanner line is capable of running at, as
           determined by tables in the system and the hardware configuration.
  TABS     Declares that the terminal has hardware tabs, so the monitor will not
           convert tabs to spaces on output.
  TGAG     Prevent messages from other users, like GAG, but only until the next
           program reset.
  TIME     Resets XTIME and inhibits automatic resetting, like ESC 1 X.  NO
           TIME, like BREAK 1 X, sets XTIME to the total run time.
  UPDATE   Enables automatic resetting of XTIME, like ESC X from a display.  NO
           UPDATE is like BREAK X.  See XTIME on page 19.
  WHO      Types out your job's wholine.  "TTY WHO n" will type the wholine for
           job n, "TTY WHO -n" the wholine for the job using TTYn.  "TTY WHO 0"
           or "TTY -WHO" will type the system wholine.
  WIDTH n  Sets the maximum number of columns for terminal output to the decimal
           value n, which should be between 16 and 255; however, any width
           bigger than 127 represents an infinite width and will completely
           suppress insertion of CRLFs in long lines.  TTY WIDTH does not affect
           displays or non-network PTYs.  The default width is 80.
                           4  BASIC MONITOR COMMANDS


Commands like LOGIN tell the monitor to run particular system programs in your
core image.  In this section, monitor commands which do not refer to a specific
program are described.  Some of them do not refer to programs in your core image
at all, but are handled entirely within the monitor itself; others run programs,
but allow you to specify the program as a command argument rather than implying
a particular one like LOGIN.
                             4.1  Running Programs


The RUN command takes as arguments an optional device name, a file name, and an
optional core size argument.  If the first argument is not a device name, DSK is
used.  The only allowable devices are DSK, SYS, UDPn, MTAn, and DTAn.  Running
programs from magnetic tape or DECtape is not recommended.  If the file name
does not include an extension, DMP is assumed.

The core size argument, if any, should be a decimal number indicating the number
of 512-word pages desired for your core image.  This must be at least as much as
the saved core image, but you can ask for more.  Certain programs with variable
buffer space will use as much as you initially allocate.  (Programs can increase
their core size dynamically by UUO.)

If you are running from magnetic tape, the core size must be specified because
the monitor cannot determine the size of a file on magnetic tape before reading
it.

The program is loaded into your core image, your job name is set to the name of
the dump file, and the program is started at the starting address specified in
the dump file.

The R command is used for running system programs.  Note that R is a separate
command from, and not an abbreviation for, RUN.  The command

R FOO 10

is identical to

RUN SYS:FOO 10

The SYS device is actually the disk, but with the special system directory [1,3]
implied.  This directory is used to store system dump files.  Any PPN given
explicitly with the R command is ignored; the PPN used is [1,3] no matter what.

By using the GET command (abbreviated G), it is possible to load a dump file
into your core image without starting it.  This command takes the same arguments
as RUN, but instead of starting the program, it types out a message indicating
the size of your core image and leaves your terminal in monitor mode.

Each of the RUN, R, and GET commands causes a RESET of your job.
                         4.2  Manipulating Core Images


The following commands refer to words in the Job Data Area (see page 13) of your
core image.  These words are generally set up by the monitor or the LOADER.  The
UUO Manual has a complete explanation of the Job Data Area.

The CORE command is used to find out or change the size of your core image in
512-word pages.  CORE may be abbreviated C.  If you include an argument, the
size of your core image will be set to that many pages. If you do not give an
argument, three lines of information are typed out in one of these two forms:

NNN pages               JJJ+KKK pages
MMM pages maximum       MMM pages maximum
UUU pages user core     UUU pages user core

The first form is used if you have no upper segment, the second if you do have
an upper segment.  NNN is the current size of your job in pages (no upper); JJJ
is the size of your lower segment and KKK is the size of your upper segment; MMM
is the maximum size allowed for your job (lower segment plus upper segment, if
any); and UUU is the amount of core currently available for use by user jobs
(i.e., core that is not being used by the system).  If you give the CORE command
when you are not logged in, you do not get the first line.

The command CORE 0 destroys your core image.  It also causes a system RESET of
your job, releasing any I/O devices your program was using, etc.

The way to create core image dump files which can be loaded later is with the
SAVE command.  This takes device, file, and size arguments just like GET.  This
command also does a RESET, and it does not save your accumulators.  Therefore,
the program cannot be continued after a SAVE command, although it can be
restarted.

Dump files on the disk can be copied (in binary mode), renamed, etc., like any
other files and will still be runnable as programs.  However, dump files on
DECtape are written differently from other files, and cannot just be copied by
normal file operations.  Instead, to store a dump file on DECtape, you must load
it into your core image and give a SAVE command to the monitor.

Unless your core image includes DDT, RAID, or BAIL (i.g., JOBDDT is nonzero),
only the locations up to the address in JOBFF are saved.  (This does not apply
if you use a core size argument.)  JOBFF is set by the LOADER to one more than
the highest address it loads into, so any core which was allocated dynamically
by your program will not be saved unless the program updates JOBFF.  I/O buffers
allocated for you by the system are allocated above JOBFF, which the monitor
then sets to the new first free address.

If your program includes an upper segment which you wish to save, you should use
the command SSAVE.  This is just like SAVE in other respects.  SAVE never saves
upper segments.

It is possible to examine and alter words in your core image individually by
monitor commands.  The command E (examine) with an octal argument will type the
contents of the specified address in octal.  The DE (deposit) command takes
three arguments in octal: the left and right halves of the word you want to
deposit, and the address.  DE without the address argument uses the address of
the last E or DE command.  E with no argument examines the location following
the last one used by E or DE.  (Note that the DDT and RAID debugging programs
provide a much more versatile way to examine and modify your core image; and for
SAIL programs, the debugger BAIL can be similarly useful.)

If your core image includes an upper segment (see page 13), you can set or clear
the write protection bit with the SETUWP or CLRUWP commands.  You cannot clear
write protection for a sharable upper segment if it is protected against you.
(See the UUO Manual for a complete discussion of upper segment protection.) 
These commands also take an optional octal argument, which is used to set the
protection code for the segment if you are permitted to change the code.
                             4.3  Starting Programs


The following commands refer to words in the Job Data Area (see page 13) of your
core image.  These words are generally set up by the monitor or the LOADER
(except for JOBREN).  The UUO Manual has a complete explanation of the Job Data
Area.

The START command (abbreviated S) is generally used to start a program at its
normal starting address in JOBSA.  This command can also be used with an octal
argument specifying some other address.  If the octal argument is preceded by +
or -, the number is added to or subtracted from the program's normal starting
address to determine the desired starting address.

The REENTER command starts the program at the reenter address specified in
JOBREN, if there is one.  JOBREN must be set by the program if it wants to use
this capability.  Program documentation will explain the use of the REENTER
command for a particular program.  An octal argument preceded by + (optional in
this case) or - will be added to or subtracted from the reenter address.

The DDT command starts the program at the address in JOBDDT, if any.  This
address is set by the LOADER if any of these debugging programs DDT, RAID, and
BAIL is loaded with your program.

When a program is stopped by typing CALL, by a UUO in the program, or by various
other conditions, the address of the next instruction to be executed is stored
in JOBPC.  If the job is continuable (not stopped because of an irrecoverable
error), the CONTINUE command will start it at that address.  (The START,
REENTER, and DDT commands will work even if the job is not continuable, except
for certain errors which destroy the core image irretrievably.)

All of the above commands place your terminal in user mode, that is, anything
you type will be processed under control of your program.  It is also possible
to start a program, but leave the terminal in monitor mode.  In this case you
can still enter monitor commands which do not affect your core image.  Monitor
commands which are illegal while your program is running will give the message
Please type ↑C first.

The CSTART command is like START but leaves your terminal in monitor mode.  Like
START, it will take the desired start address as an argument or use the contents
of JOBSA.  The CCONTINUE command is the monitor mode equivalent of CONTINUE.
There is no such equivalent for REENTER or DDT.  With the terminal in monitor
mode, the program can still type output on it, but an attempt at reading from
the terminal will make the job wait (in IOWQ) until the terminal is placed in
user mode.

The HALT command stops your program.  The monitor converts the CALL key into
this command, so you should never need to type it explicitly.  (You can type it
explicitly, of course, only if you started the program with CSTART or CCONTINUE,
or if you typed ESC . later to put your terminal into monitor mode.)
                               4.4  Detached Jobs


Normally, any user job is associated with a particular terminal.  However, it is
possible to detach a job from its terminal so the job can continue running while
the terminal is used with another job.  Also, the monitor sometimes starts up
detached jobs itself to perform various system functions; such jobs are called
phantoms.

Detached jobs can run, and do all the things attached jobs can do, except that
if they try to output to device TTY, the output is lost; attempted input from
TTY makes the job wait indefinitely (until it is attached).  Note that there is
no way to leave typed-ahead input text for a detached job to read.  If a
detached program executes an EXIT UUO, the job is killed.

The DETACH command detaches your job, leaving your terminal in monitor mode and
not logged in.  You can then log in again without affecting the old job.  DETACH
takes no arguments.  Several commands described below combine the DETACH
function with other useful things; for instance, the FORK and CFORK commands
(see below) detach your current job and get you a new job without your having to
explicitly log in again.  Please remember not to leave jobs detached forever,
but to log them out eventually!

The ATTACH command is used to attach your terminal to a detached job.  If you
are already logged in, your old job is detached.  The ATTACH command takes two
arguments, a job number and the PPN under which that job is logged in.  (If you
are already logged in with the same PPN, you need not give the second
argument.)  Note that if you were displaying a wholine for your old job, it will
still be displayed, indicating the job as detached.  This is handy for
re-attaching it when you want to, in that it shows the job number.  (Typing ESC
W again will, of course, display the wholine for your new job.)

If you are logged in and give the ATTACH command with no argument, it will look
for a detached job with your PPN to attach.  Repeating the command will cycle
through all such jobs.  The command will tell you the job name and number of the
job it finds.  This is a simple way to attach back to a detached jobs of yours.

You can actually attach to an already-attached job, as well as to a detached
one.  But if the job is already attached to a terminal, then when you attach it
a message is typed on the job's previous terminal telling who has stolen the job
away.  If your PPN before typing the command was not the same as the attached
job's PPN, the message will also be typed on the console terminal in the machine
room.

The ATTACH command sometimes requires a password to be typed, namely that of the
PPN of the job being attached.  The password will be asked for if you try an
ATTACH command when you are not logged in, or if you are logged in with a PPN
different from that of the job you are trying to attach.  A password is also
required to attach a privileged job, unless you already have all its privileges.
If the appropriate password is a remote-only password and you are on a local
terminal, then you may not have to give the password.

You can attach a phantom (not logged in) job only if it really belongs to you
(same PPN as your current job) or if you have the ATT privilege.  In either
case, this command will also log in the phantom by turning on the JLOG bit in
its job status word.

The FORK command will detach your old job and log in a new one.  It is faster
than DETACH followed by LOGIN, because it does not run the LOGIN program (and
you don't have to give your password again).  Instead, FORK merely copies the
system information from your old job into the new job; in particular, FORK
copies your old job's alias to your new job.  If you are running a program and
don't want to stop it but do want to use your terminal with a new job, then the
best thing to do is to give the command ESC . (see page 18) to get your terminal
into monitor mode; at that point you can give the monitor command FORK to give
you a new job, detaching the old one without stopping it.  If you later use
ATTACH to re-attach to the old job, then you can use the command BREAK . to put
your terminal back into user mode so that you can once again give commands to
the old user program.  If you give a FORK command when the system has no more
job slots, then nothing will happen and your terminal will be left attached to
the existing job.

If your program is stopped (e.g., you've already typed CALL) and you want to
continue it but get a new job (as with FORK), then give the CFORK command, which
will continue the old job, detach it, and then get you a new job.  If you want
to continue and detach the old job without getting a new job, then give the
CDETACH command, which does exactly that.  Thus, CFORK is equivalent to
CCONTINUE followed by FORK, and CDETACH is equivalent to CCONTINUE followed by
DETACH.  If your program isn't already stopped and you don't want to stop it
just to do the detach or fork, then you can say ESC . and then DETACH or FORK,
as described in the previous paragraph.

The PDETACH command is just like DETACH, except that it also makes the detached
job a phantom (JLOG bit off) so that it will go away if it encounters an error.
There is no CPDETACH (nor PCDETACH) so if you want to continue the job, you
should do a CCONTINUE command first and then the PDETACH.
                              4.5  Device Control


Certain I/O devices can only be used by one user at a time, such as a magnetic
tape unit.  In some cases, like the XGP, the system provides a facility for
queueing print requests so that individual users need not actually control the
device themselves.  However, when a user does need to use such a device, the
ASSIGN command is used to ensure that only one user at a time tries to use the
device.  The ASSIGN command (abbreviated A) can also be used to cause a logical
device name to be associated with a particular device.  Thereafter, any
reference by your program to the logical name will be translated into the
corresponding physical device.

The command takes two arguments, a physical device name, and an optional logical
name.  The physical name can be generic: the command

ASSIGN MTA

will select an available mag tape unit (MTA0 or MTA1) if there is one available.
You can also select a particular unit explicitly.

The logical name feature is sometimes used by programs to allow you to control
their I/O without having to type instructions to the program itself.  For
example, a program which produces a listing output might direct it to a
particular filename on device name LST.  Before running the program, you could
type

ASSIGN DSK LST

to write the listing file on the disk, or

ASSIGN TTY LST

to type it out at your terminal.  You can also change the meaning of what is
normally a physical device name this way--the command

ASSIGN DSK LPT

will make a program which was written to write its output on the line printer
use a disk file instead.  You might do this simply because there is no longer a
line printer available directly on the SU-AI system.

The ASSIGN command is used in a special way for User Disk Packs.  A UDP may be
used as a public or a private device.  In the former case, other jobs may use
the same UDP at the same time, as with the system file disks.  A privately
assigned UDP, however, is restricted to the one job which assigned it.  (Note: a
privately assigned UDP is still a sharable device, in the sense that the job
which owns it can operate on several files simultaneously, unlike non-sharable
devices like DECtape drives, on which only one operation can be in progress at
any time.)  A UDP is normally a file-structured device, with a directory
structure just like the one described for the main file disk in Section 1.5.
However, it is also possible to use a UDP as an unstructured device, in which
allocation of storage on the disk pack is done explicitly by the user program.
This mode of using the UDP is called old mode (because it used to be the only
mode available).  The format of the ASSIGN command for a UDP is

ASSIGN mode UDPn logical-name

The optional mode argument can be

  PUBLIC   public access, file structured UDP
  PRIVATE  private access, file structured UDP
  OLD      private access, non-structured UDP

The default mode is PUBLIC.  A later ASSIGN command for the same device can be
used to change the mode from PRIVATE to PUBLIC, or from PUBLIC to PRIVATE if no
other jobs are using the device.  However, to change into or out of OLD mode,
the device must first be deassigned by all jobs using it.  This is because a
particular pack either is or isn't formatted for file structured use, and the
mode given in the ASSIGN command must agree with that of the pack itself.  (A
mismatch is not detected when you give the ASSIGN command, but will be caught
when your program actually tries to use the device.)  The only exception is that
a file-structured pack may be read, but not written, in OLD mode.

Because of the need to distinguish between the two different UDP formats, your
program will not be allowed to open the UDP unless it is already open or
assigned.  Thus, when you first mount a UDP you must ASSIGN it to specify the
mode.  When a UDP has been assigned in PUBLIC mode by one job, any job may use
it without assigning it.

We currently have two drives for user disk packs: UDP1 and UDP2.  The monitor
treats UDP as a generic device name; the command ASSIGN UDP will select a free
drive if there is one.  An ASSIGN command which specifies a particular drive in
PUBLIC mode, e.g., ASSIGN UDP2, will succeed if the particular drive is not in
use or if it is in PUBLIC use.  For programming details on the use of user
packs, see the UUO Manual.  For instructions on handling and mounting of UDPs,
see page 169.

Once you have assigned a non-sharable device with the ASSIGN command, no other
job can use it until you release it with the DEASSIGN command.  This command,
abbreviated D, takes either a logical or a physical device name as argument.
(Note--Assigning DSK or SYS does not prevent other users from using the disk,
since these are sharable devices.)  It is possible for a program to use a device
which is not assigned, but the device is released in that case as soon as the
program stops using it.  The DEASSIGN command with no argument will deassign all
devices assigned by your job.

Because UDPs can be assigned in a way which permits public access, the DEASSIGN
command for a UDP types a message at your terminal indicating whether or not the
pack can be dismounted.  You will not get any such message from DEASSIGN if your
program still has the device in use.  For example, if you call out of a program
which is using a UDP and deassign the UDP, it will still be in use by your
program.  You can make sure that your program isn't using the UDP (or any other
device) by resetting the program, e.g., with the RESET command.  You will then
be told whether or not you may dismount the pack.

The job which has a device assigned may give it to another job with the REASSIGN
command.  This command takes two arguments, the device name and a job number.
This can occasionally be useful if, for example, one job writes a tape which
another should then read.  The REASSIGN command prevents the possibility of
another job grabbing the tape unit before the intended recipient does.

The FINISH command (abbreviated FINI) with a device name argument releases the
device from your program.  If the device is a directory device (such as the
disk) which your program had open for output, the file is closed so that as much
data as the program wrote will be saved.  (This applies in the case in which the
program was stopped before its normal exit, either by CALL or by an error.) 
FINISH with no argument releases all devices.

The FINISH command may also be given with a job number and possible PPN
argument, like the ATTACH command.  In that case, the specified job will have
all its devices released, as if a FINISH with no argument had been typed at its
terminal.  The target job is notified, as for the ATTACH command.  Also, the
same restrictions about FINISHing phantom jobs apply as for ATTACHing phantoms.
FINISH should be used with care to avoid clobbering files that were being
overwritten by the program, since FINISH will cause any new version of such a
file to replace the old version, even though the new version may be incomplete.

The FLUSH command is used to empty the input and output buffers of a terminal
which is not in use.  It takes a device name as argument; the device must be a
terminal which is not in use, or your own terminal.  This command may be used
without logging in.  A user with the UPG privilege can use this command on any
TTY whether it is in use or not.  (Any user may have the UPG privilege, but it
must be enabled specifically before giving the FLUSH command.  See the ENABLE
command, page 87.)
                            4.6  System Information


Several commands exist to find out various things about your job or others.
Some of these duplicate information available on the wholine at display
terminals.  None of the commands in this section affect your core image.

The PJOB command types the number of your job, if you give the command with no
argument.  If you use a device name as the argument, it types the wholine of the
job using the device.  (If the device is not in use, it says so.)  The argument
can be a name of the form DDn, to find out who is using Data Disc channel n; you
will be told the TTY line number, if the channel is in use as a terminal's main
channel, as well as the owning job's wholine.  If the argument is TTYn and the
specified line is a PTY, then the command types wholines for both the job
running under the PTY and the job which owns it.  If the argument is a generic
device name (UDP, DLN, DTA, or MTA) or a 3-character sharable device name (DSK,
PUP, IMP, ELF, or NUL), then the command will type out one wholine for each
instance of the device that is in use, plus a little general information about
the device; in the lines typed out, a number-sign (#) flags the device as
ASSIGNed by a monitor command from that job.

The PPPN command prints out the logged in PPN and the alias, if any, for your
own job (no argument) or the job number you give as argument.

The PTTY command prints out the terminal line number of your own or another job.
If the terminal is a Data Disc, it also prints the channel number and the
responsible physical terminal.

The TIME command, which also takes an optional job number argument, types out
six quantities for the specified job, the first three of which are times in
hours:minutes:seconds'ticks (a tick is one sixtieth of a second):

  Total       is the total run time for the job since it logged in.
  Increment   is the run time since the last time a TIME command for this job
              was given by the job itself.  That is, the Increment time is
              reset when you give a TIME command for your own job, but not
              when you give one for another job.
  Wait        is the time the job has had to wait for the system, including
              time spent in RUNQ and disk I/O wait, but not tty I/O wait,
              STOP, etc.  It is somewhat of a measure of the quality of
              service the job is getting.
  PS          (Page-Seconds) is a measure of the demands the job has made on
              the system.  It is incremented by the job's core size in pages
              for every second of runtime.
  EBOX msec   is a count of the number of milliseconds of runtime as measured
              by the KL-10's internal meter.  This time may not be equal to
              the total runtime reported first, but should be more
              reproducible between runs of the program.
  EBOX increment is the EBOX count since the last TIME command.

The command TIME 0 types the amount of time since the last system reload, the
clock time of the last system pause (i.e., a service interruption after which
service was resumed without a reload), and the percentage of uptime spent
running the null job (what the system does when there are no real jobs it can
run).  It also types some extra information for the benefit of system wizards,
which varies with their interests at the moment and is generally not meaningful
to users, e.g., the percentage of time spent in the monitor at interrupt level.

The DAYTIME command with no argument types the current day of the week, date,
time, and outside temperature in Farenheit and Celsius.  With a job number
argument, it types the time that job logged in, the time it was last run, and
the current time.  DAYTIME 0 specifies your own job.  If the job has been logged
in since the previous day, dates (day of the month) are typed along with the
three times.

The RESOURCES command lists the available system resources: it types the number
of free tracks on the file disk, and the names of free devices (mag tape, etc.)
other than the disk and terminals.  A separate line is typed for each UDP drive
unless the drive is detached from the system.  The line says "free" if the UDP
is not in use; otherwise it indicates whether it is PUBLIC or PRIVATE; if the
drive has a file-structured pack mounted, its name (pack ID) and the number of
free tracks, as for the DSK device, will be typed if known to the monitor.
(That is, the name will be typed if any input/output operation has actually
happened on that pack since it was first ASSIGNed.)

The FILES command lists disk files in use by a job, with some status
information.  It can take a job number argument (0 or no argument means your own
job), in which case all files in use by that job are listed, or a filename
argument, in which case the status of the specified file is displayed (if it is
being used by one or more jobs).  Each line typed by this command contains the
job number of the job using the file; the filename, extension, and directory ppn
of the file; the number of records in the file; the number of the record
currently being read or written; and the way the file is being used: R for read,
W for write, or RA for read-alter, possibly followed by E for end-of-file seen.
The letter U indicates that the file is on a UDP.

The HELLO command types the name of the current version of the monitor.

All of the above commands are legal when you are not logged in.
                          4.7  Miscellaneous Commands


The ALIAS command is used to set your job's disk PPN or alias.  If you have an
alias, all disk references by your job which do not include an explicit PPN will
use the alias directory rather than your logged-in PPN directory.  The argument
can be PRJ,PRG to set the alias to that PPN, or just PRJ to use your login
programmer name in the alias.  An argument of PRJ, (i.e., with a comma but no
prg) uses your old alias programmer name.  No argument resets your alias to
zero, so your logged-in PPN will be used for disk files.  If you have an alias,
your logged-in PPN is still checked for file protection purposes.  ALIAS doesn't
override the protection of any files in the area you alias to -- use the ACCESS
command (see page 86) if you need to get to protected files (ACCESS requires
you to type the directory's password).

The TALK command can be used to talk to a user at another terminal.  It takes a
programmer name or device name as argument.  The device must be a terminal.  If
a programmer name is used, the system will look for a terminal in use by that
programmer; there must be exactly one such terminal which is available for
talking.  If there are several such terminals, they will be listed and you must
select one by device name in another TALK command.  A terminal is not available
for talking if it is gagged (i.e., the user has used the TTY GAG command, or the
program running at the terminal has gagged it by UUO), if it is open in image
mode, if it is holding output, or if it is a display whose currently selected
piece of paper is smaller than 15 lines high or is not activated.  (Note to
remote users: There is no operator on this system; TALK CTY is not a good way to
get assistance!)  If the command succeeds, all characters you type are typed out
on the other terminal, and vice versa.  If the terminal you specify was already
in a talk ring, you are added to the ring; all characters typed at any terminal
in the ring appear on all the others.  You leave the talk ring by typing CALL.
You must be logged in to enter a talk ring; if you are not logged in and want to
talk to someone, use the SEND command to send that person a message to that
effect.

If the argument to the TALK command contains the character @ or %, then it is
taken as a network user at a remote host.  In this case, a program is run to
establish the talk connection, destroying your former core image.  Local talking
does not affect your core image.

The KILL command can be used to kill another job.  It takes the job number and
PPN (if different from your own) as arguments.  (The KILL command cannot be used
to kill your own job; use the KJOB command for that.)  The RESET command resets
the specified job, or your own job if no argument is given.  Resetting a job
primarily causes all of its device usage to be aborted (e.g., open files get
closed and new files that were being written are discarded); resetting also
normalizes other facets of the job, including its display and its interrupt
enablings.  Needless to say, both of these commands are dangerous and should not
be used on a job unless you are sure you want to affect that job's operation.
They are included to control runaway jobs which cannot be stopped normally,
e.g., because they are detached.  These commands can be given for any job by any
logged-in user.  If the job's PPN does not match your own PPN, the command is
logged on the console terminal.  Note: unlike the FINISH command, these commands
do not close (and preserve) files being written by the affected job.

The QUIT command can be given from a network PTY to make the WAITS server close
the network connection.  If you are still logged in when you give the QUIT
command, your job will be detached; so usually you should log out first.
Actually, logging out itself normally does a QUIT for you automatically, unless
you use the /O switch or the /OPEN logout option; see Section 5.2 for details
on LOGOUT's closing of network connections.

A user who wishes to run a long compute-bound program unobtrusively in a sort of
background mode can enable the "Negative Service Level" privilege, NSL, for the
given job.  This means that the job will be run only when there aren't any
normal (non-NSL) jobs trying to run.  Therefore an NSL job will not bog down the
rest of the system (it will, however, increase the actual load average by 1,
since presumably it will be in the RUNQ all the time).  NSL can be enabled and
disabled by anyone with the monitor commands:

ENABLE NSL
DISABLE NSL

and the NSL privilege (4,,0 bit in the passive privilege word) can be enabled or
disabled by the SETPRV UUO from any program.  Although NSL is in the privilege
word, it is really just a status bit for the job in question.  The NSL
"privilege" is not copied to a new job started by FORK.  However, it is copied
to a new job started by the SWAP UUO.  The WHO program displays "NSL" for any
job that has the NSL privilege enabled.

The ELFQFIX command is used to unwedge the system if it gets confused about who
is using the sharable ELF device.  If your attempts to use the ELF always leave
you in ELFQ for a long time, then giving this command should correct the
situation.  This command takes no arguments and is designed to make sure that it
can't do any harm; it will tell you if it is successful.
                           5  SYSTEM PROGRAM COMMANDS


The remaining monitor commands all run particular system programs in your core
image.  There are a few main groups of these commands and a few miscellaneous
ones.  These commands are documented along with the programs they run.  The next
two subsections are about the LOGIN and LOGOUT programs and the commands which
run them; these were briefly introduced earlier.  The major command groups are
then presented, and finally the miscellaneous system programs.  Many system
programs are not run by special monitor commands, but by the R command.  Those
programs are not documented here, but many are documented online in disk files
on [*,DOC] areas.  The general way to find the online writeup for a program
called PROG is with the command READ PROG, which runs E and searches for the
appropriate file documenting PROG.  The command READ HOW will edit the HOW file,
which provides introductions on the use of many system programs.
                                   5.1  LOGIN


The LOGIN command is used to begin a session of using the computer.  It runs the
LOGIN program, which provides several optional services as well as setting up
the necessary system tables for your job.

The LOGIN command may be abbreviated L.  It takes one argument, a
project-programmer name.  Different characters used between the two parts of the
name are used for different options:

  PRJ,PRG  types all system messages and processes OPTION.TXT (see below)
  PRJ/PRG  types system messages new since last login, processes OPTION.TXT
  PRJ.PRG  types no messages, ignores OPTION.TXT; for fast login
  PRJ%PRG  sets new password, as explained below, then acts like PRJ/PRG
  PRJ!PRG  requires password even if at local terminal (see below); like
           PRJ/PRG

The PRJ can be omitted, in which case project 1 is implied.  If the delimiter
before the PRG is also omitted, 1/PRG is implied.

System messages are notices for all users, sent by the MAIL * command and stored
in the file NOTICE.TXT[2,2].  There may also be messages addressed specifically
to you.  The handling of your personal mail is explained below.

Before typing any other messages, and regardless of the option used, LOGIN will
notify you if you have any other jobs logged in.  If you have a detached job
logged in, you will be beeped.  LOGIN will list the job number, PPN, TTY, and
job name of any job with your login programmer name.

It is possible to set a password and file protection codes to restrict access to
a particular PPN.  If the PPN you specify to LOGIN has a password, LOGIN types
Password= and you must type the correct password to log in.  Echoing of input
characters is turned off so the password does not print.  Passwords may be one
to six letters or digits followed by RETURN.

To protect files from unauthorized access, there is a protection code associated
with each file.  The code specifies the access allowed to the file for its owner
(i.e., a user logged in under the file's PPN), for other logged-in users, and
for not-logged-in users (using the monitor commands allowed without login).  You
can set the protection code for a file using the COPY program (see Appendix 2).
However, you can use the LOGIN program to set the protection code of your file
directory itself and the default protection code which is assigned to new files
created in your directory if the program writing the file does not specify a
value explicitly.  (These two protections and even the password for a directory
can also be set with the UFD command; see page 86.)

If you use % as the delimiter between the project and programmer names when you
log in, LOGIN will give you the opportunity to change your password, the file
directory protection, and the default protection for new files.  If you ask to
change your password, you will be asked to type the new password twice to guard
against typing errors, since the password will not be echoed.  The protection
codes are entered as three-digit octal numbers, with the following meanings:

  Bit      Meaning in directory protection code

  400      password is for remote logins only (see below)
  200      unused
  100      owner can't write files
  040      logged-in users can't change protection of files
  020      logged-in users can't read directory or any files
  010      logged-in users can't write any files
  004      not-logged-in users can't change protection of files
  002      not-logged-in users can't read directory or any files
  001      not-logged-in users can't write any files

  Bit      Meaning in file protection code

  400      don't dump this file (see DART, Appendix 5)
  200      delete protect (see COPY, Appendix 2)
  100      owner can't overwrite this file
  040      logged-in users can't change protection of this file
  020      logged-in users can't read this file
  010      logged-in users can't overwrite this file
  004      not-logged-in users can't change protection of this file
  002      not-logged-in users can't read this file
  001      not-logged-in users can't overwrite this file

Although there is a lot of complicated detail here about file protection, please
bear in mind that the system is not meant to be totally secure, and that most
users do not protect their files at all.  The default directory protection is
005, meaning that all logged-in users have read and write access, and
not-logged-in users have read access.  Also, there are both official (see the
UNPROTECT command, page 86) and unofficial ways to get around file protection.
Protecting a file simply guards against unintentional access and notifies polite
users that you wish to keep the file private.

When you log in with %, you can also add your directory to one of several file
access groups.  Membership in such a group means that you want to allow anyone
with the corresponding file access privilege to have owner access to your files,
as if he or she were logged in under your PPN.  For example, there is a SYS
group for system files; such directories as [SPL,SYS] (for spooler files) are in
the SYS access group, and the people in charge of system programming have the
SYS access privilege.  This mechanism allows users who work together on some
project to share one another's files without allowing other users access to
them.  File access privileges, like all privileges, are assigned by system
programmers.  A special case is the MAS (master) file access group.  The MAS
privilege is automatically assigned to all PPNs with project name 1, but is
effective only for access to directories with the same programmer name.  That
is, if you have a directory named [XYZ,PRG] and you give it the MAS access group
attribute, you will have owner access to it when logged in as [1,PRG] but user
[1,ABC] will not have owner access to it.  This facility allows you to organize
your files into several directories, but still have owner access to all of them
while logged in under project 1.  Remember that, although your project 1 PPN
automatically has the MAS privilege, you must explicitly enter your other
directories in the MAS access group for this facility to operate.

If the 400 bit is on in the protection code for a file directory, the password
associated with that area is used only for logins from a remote site; no
password will be required for local login on that PPN.  (Note: if you log in
locally without a password, you will not be given any privileges to which you
would otherwise be entitled, including file group access privileges such as MAS.
You can use the delimiter ! between your PRJ and PRG to force LOGIN to ask for a
password, to get your privileges.  You can also use the ACCESS command after
you've logged in to get your privileges by giving your password; see page 86.) 
Remote login is not allowed on a PPN which does not have a password; thus, if
you want to be able to log in remotely but do not want to have to type a
password for local login, you can set the 400 bit in your directory's protection
code.

The further details of LOGIN's operation are controlled by a file named
OPTION.TXT which you may have in your directory.  If there is one, it is
searched for a line of the form

LOGIN:opt1,opt2,opt3;comments

where opt1...optn are the desired options.  Only the first six letters of an
option name are read.  Upper or lower case is okay.  Options may actually be
divided over several lines; end all but the last such line with a comma.  A
(required) semicolon ends the option list.  Several other programs use this
OPTION.TXT file, looking for their own option lines.

The LOGIN options are as follows:

  DISPLAY=... Sets your display type and display parameters to those specified
            immediately following this option name.  For complete details, see
            page 30.
  FDISPLAY=... If you are on a high-speed dialup line, this sets your display
            type and display parameters to those specified immediately
            following this option name.  For details, see page 30.
  NOMAIL    Suppresses any questions about message files.  This is for people
            who like to type ahead while LOGIN is running.  The exact effect
            depends on what other options are used; see below.
  XMAIL     Prevents notification about a message file for you if the file was
            last written by you (same programmer name), unless it was written
            by a program named MAIL.  In other words, it does not tell you
            about a message file which you have already edited since the last
            new message for you.
  MESSAG    Types your mail without asking; see below.
  NONOTE    Prevents typing out system messages from NOTICE.TXT[2,2].
  GRIPE     Types out new gripes just like new system messages.
  BEEP      Enables the system feature of automatic beeping whenever your job
            finishes doing something that took more than 15 seconds of real
            time.  Like ESC Z.
  AUDIO=n   Selects audio switch input channel n to your speaker if you are at
            a DD or III terminal.  "n" is an octal number.  If n is greater
            than 1000 octal, channel n-1000 is selected with beep
            interruptions disabled.
  RPGSAV    Restores your TMPCOR files for SNAIL commands remembered from the
            last time you were logged in.  You must also have the RPGSAV
            option specified for LOGOUT.  This option will be explained more
            fully in the LOGOUT section.
  EINIT     This makes LOGIN write a TMPCOR file which will cause the editor E
            to execute your entire EINIT.CMD file (on your login disk area)
            upon startup.  READ E for details.
  EINIT(n:m)This makes LOGIN write a TMPCOR file that will cause E to execute
            pages n through m of your EINIT.CMD file upon each startup.
  EINIT=\...\ This, the general form of this option, allows you to stick any
            command text you want into the TMPCOR file that E executes on each
            startup.  The character "\" is an arbitrary delimiter not
            occurring in the command text shown here as "...".  The command
            text uses E's standard macro text representation, e.g., "⊗C" means
            carriage return.  The text must not exceed the maximum allowable
            length (currently 50 characters); any longer string should be put
            into an EINIT.CMD file and executed from there (e.g., with one of
            the other EINIT option forms above).  READ E for more details.
  CHRMAC=file Allows you to have terminal input macros defined automatically
            upon login.  (For more details on terminal input macros, including
            how to define and call them, see Section 2.13).  The file named in
            this option is the macro definition file from which the macros are
            to be loaded.  If "=file" is omitted completely, then the default
            filename is used.  If a filename with no extension is given, then
            the default extension is used.  The default filename and extension
            are the same as for the system program CHRMAC (which is used to
            define macros), namely, CHRMAC.CHR.  The format of the macro
            definition file is exactly that which is used by the CHRMAC
            program.  Thus you should use the CHRMAC program (R CHRMAC) to
            create the macro definition file that you want LOGIN to read.
            Note: It is possible to have LOGIN load macros from two or more
            such files: simply include two CHRMAC options, one or both
            followed by a filename.  The files will be read in the order
            given.  Further note: Any NOEDIT macros to be loaded must come
            from a CHRMAC option that occurs AFTER any DISPLAY (or FDISPLAY)
            option that marks the terminal as a NOEDIT display.  NOEDIT macros
            cannot be defined on a terminal that is not a NOEDIT display; such
            definitions will simply be ignored.
  DIGEST    Tells you if there is a new Associated Press news digest that came
            in after the last time you logged in and asks you if it should
            type it out.
  XDIGEST   Always types the A.P. news digest if there is a new one since you
            last logged in, without asking and independent of any other option
            setting.
  REMIND    Looks for a special file under your name on [2,2], and if the file
            exists, types it out and then deletes it.  The name of the file
            for a user named FOO is "   FOO.RMD[2,2]", also sometimes called
            ∂FOO.RMD.
  QMAINT    Only types maintenance forecast if it has changed since your last
            login.  Otherwise the maintenance forecast is always typed unless
            . is used as the PPN delimiter.
  DETACH    Enables the DET privilege for your job, to tell the system that
            you would prefer to have your job merely detached instead of
            killed when autologout (see page 5) is ready to strike your job.
  ME        Tells you your fortune.
  COOKIE    Alternate fortune cookie selection.  See which you prefer.
  SYSTAT    Types out a line indicating how many jobs are logged in and how
            many are running, to give an idea of system load.
  LOGRUN    Runs the LOGRUN program, which executes monitor commands from a
            LOGRUN entry in OPTION.TXT; see below for details.
  INIT      Runs the file INIT.DMP in your directory after login.
  RUN=file  Like INIT, but runs a program named explicitly in the option, from
            default device SYS, e.g., RUN=LOGRUN is the same as LOGRUN, and
            RUN=DSK:INIT is exactly like INIT (since DSK is specified as the
            device, your own PPN is the default in this case).
  PORNO     Try it and see.
  GAG       Tells the system not to allow other users to send messages to your
            terminal or to link to you with the TALK command.  Like TTY GAG.
  NOGAG     Tells the system to allow other users to send messages to your
            terminal or to link to you with the TALK command.  Like
            TTY NO GAG.  This is the default.
  WHO       If you are at a display, starts a wholine, unless there is already
            one going.  (Like ESC W, unless you aleady have a wholine.) This
            option must come after any display option present, such as DISPLAY
            or FDISPLAY, in order for your terminal to be known as a display
            by the time the WHO option is encountered.  This option is now the
            default.
  NOWHO     Tells LOGIN not to turn on your wholine for your display (if any).
            Without this option, if you are at a display LOGIN will turn on
            your wholine unless it is already on.
  HIDE      Hides your terminal from the spying programs PK and PPK, like
            ESC H.
  UNHIDE    Allows spying programs to view your terminal, like BREAK H.  This
            is the default.
  BOW       If you are at a Data Disc display, tells the system to display
            piece of paper output in black on white (actually green on white)
            instead of the reverse.  Not very useful, since any special
            display output will still be green on black.
  NOBOW     Display white on black (well, green on black).  This is the
            default.
  WIDTH=n   If you are at a non-display, sets the maximum number of columns
            for terminal output to the decimal value n, which should be
            between 16 and 255; however, any width bigger than 127 represents
            an infinite width and will completely suppress insertion of CRLFs
            in long lines.  WIDTH is ignored on displays and non-network PTYs.
            The default width is 80.  Like TTY WIDTH n.
  FULL      If you are at a non-display, sets full character set mode.  Like
            TTY FULL; see the ESC F command on page 18.
  NOFULL    If you are at a non-display, clears full character set mode.  Like
            TTY NO FULL; see the BREAK F command on page 18.
  TABS      Unless you are at a DD or III, this clears the tab expand bit;
            tabs will not be converted to spaces on output.  Like TTY TABS.
  NOTABS    Unless you are at a DD or III, this sets the tab expand bit; tabs
            will be converted to spaces on output.  Like TTY NO TABS.
  FTABS     If you are on a high speed dialup line, clears the tab expand bit;
            tabs will not be converted to spaces on output.  Like TTY TABS.
  FNOTABS   If you are on a high speed dialup line, sets the tab expand bit;
            tabs will be converted to spaces on output.  Like TTY NO TABS.
  CONVERT   If you are at a non-display, tells the system to convert between
            WAITS and ASCII character codes, like TTY CONVERT.  This is the
            default.
  NOCONVERT If you are at a non-display, tells the system not to convert
            between WAITS and ASCII character codes, like TTY NO CONVERT.
  GLASS     If you are at a non-display, tells the system to output
            backspace-space-backspace whenever you backup over an input
            character, in order to erase the deleted character.  Like
            TTY GLASS.
  NOGLASS   If you are at a non-display, tells the system not to use
            backspace-space-backspace to erase input characters.  Like
            TTY NO GLASS.  This is the default.
  DELETE    Disables the interchanging of the two input characters Delete (177
            octal) and ↑H (λ, 10 octal).  Like TTY DELETE.  This is the
            default.
  NODELETE  Enables the interchanging of the two input characters Delete
            (WAITS backspace character, 177 octal) and ↑H (WAITS λ, ASCII
            backspace character, 10 octal), so that ↑H can be used as
            backspace.  Useful if the Delete key on your keyboard is not
            conveniently located.  This command is meaningful only on
            non-displays.  Like TTY NO DELETE.
  FILL      If you are at a non-display, sets the fill switch to insert extra
            carriage returns on output to give the carriage time to get all
            the way back.  Like TTY FILL.
  NOFILL    If you are at a non-display, clears the fill switch thus
            suppressing insertion of extra carriage returns on output.  Like
            TTY NO FILL.
  ECHO      If you are at a non-display, tells the monitor to send back to
            your terminal the characters you type.  Like TTY ECHO.
  NOECHO    If you are at a non-display, tells the monitor not to send back to
            your terminal the characters you type.  Like TTY NO ECHO.
  ARROW     If you are at a non-display, tells the monitor to type out
            characters below octal 40 as uparrow-letter (e.g., ↑A) rather than
            the character itself except for BEL (7), TAB (11), LF (12), VT
            (13), FF (14), and CR (15).  Like TTY ARROW.
  NOARROW   If you are at a non-display, tells the monitor to type out
            characters below octal 40 as themselves instead of as uparrow
            characters.  Like TTY NO ARROW.

The options RUN, LOGRUN, INIT, PORNO, and COOKIE are mutually exclusive, since
they each tell LOGIN to transfer control to another program after the login.  If
more than one appears in your OPTION.TXT, the one which is earliest in the above
sentence wins, e.g., RUN has highest precedence.

If there is a message addressed to you, LOGIN normally types

Message for YOU last written by PRG using PROGRM on dd-mon-yy at hhmm
Read it now?

where YOU is your programmer name, PRG is the programmer name of the last user
to write anything in your message file, PROGRM is the name of the program used
to do it, and dd-mon-yy and hhmm are the date and time it was done.

If you type Y, the message file is printed, and you are allowed to delete it
(the whole file).  If you type N, the message file is not printed.  You can also
type R, which will treat your mail file like a system message file; i.e., header
lines will not be typed, and, if you used a slash in the command, the only
messages typed will be those which came since you last logged in.  However, R
may not find the recently received messages correctly if your mail file is in E
format.  If you type R, LOGIN does not give you a chance to delete the file.

If you have the MESSAG option but not the NOMAIL option, then personal mail is
always typed out without asking first.  If you have both MESSAG and NOMAIL, the
mail is typed but you are not given the chance to delete it.  If you have NOMAIL
alone, you get the Message for YOU...  line but not the mail itself; many people
use the NOMAIL option for LOGIN and run other programs to read their mail.  See
the file E.ALS[UP,DOC] on the use of E as a good way to process your mail;
non-display users may prefer to use RCV -- see page 147.

If you have DIGEST and NOMAIL, you are notified of a new A.P.  digest but it is
not typed out.  (RCV will also do this for you.)  It is also possible to get
automatic notification of incoming news stories on particular topics from the NS
program; LOGIN will tell you if there are any NS notifications for you

The LOGRUN program looks for a line in your OPTION.TXT file starting with
LOGRUN:.  It then takes that line, and all following lines until a semicolon is
seen, and makes them be executed as if you typed them in.  (The semicolon is
required.)
                                  5.2  LOGOUT


The command for terminating a session on the computer is KJOB (kill job), which
runs the LOGOUT program.  The command may be abbreviated K.  It takes an
optional switch argument to select various optional features.  The OPTION.TXT
file is also used to control logout options.

The LOGOUT program normally types out several lines of accounting information,
e.g., computer time used.  If you are not logged in elsewhere, it deletes any
files in your directory with extension RPG, as well as any files of length zero
with extension TMP.

If the system downtime forecast file (\DOWN) has changed since LOGIN last showed
it to you (e.g., since you logged in), then LOGOUT will type the forecast as you
log out.

If you are telnetted to WAITS via a network, the LOGOUT program normally closes
your network connection after logging you out unless you specifically ask that
the connection be kept open with the OPEN option or the /O switch.  However, if
you are logging out with the KATTACH or KLOG command, then your connection is
kept open in any case, since you are switching to another job.

This normal processing can be affected by switches in the command itself or by
options in the OPTION.TXT file.  LOGOUT looks for a line in OPTION.TXT of the
form

LOGOUT:RPGSAV,ME,FAST,NODM,OPEN,HANGUP;

Of course, you need not use all of these options.  The options, if found, have
the following effect:

  RPGSAV   Don't delete .RPG files, and save TMPCOR files on disk.
  ME       Type a friendly message (try it).
  FAST     Just log out, don't delete anything, don't save TMPCOR, don't print
           statistics.
  NODM     Execute a TTY NO DM command if the job is running on an individual
           display terminal, such as a Datamedia.  This makes the system
           forget about the display type, after possibly restoring certain
           terminal modes (like Roll mode on a Datamedia).  This option is
           ignored for the KLOG and KATTACH commands.
  OPEN     Don't close the network connection if the user is telnetted to
           WAITS from elsewhere.
  HANGUP   If you are connected to WAITS via a dialup phone line, then, with
           this option, the system will automatically hang up on you when you
           log out.  The hangup will usually happen before all the type output
           from LOGOUT has come out.

Switches are single letters preceded by a slash (e.g., KJOB/F).  The switches
are:

  /K       Kill .RPG files (only necessary if you have the RPGSAV option).
  /S       Save .RPG files; save TMPCOR in .TMP files.
  /M       Type a message, like the ME option.
  /F       Fast logout, like the FAST option.
  /Z       Zero the disk.  Deletes all your files, after asking if you really
           mean it.
  /N       Execute a TTY NO DM command just like the NODM option above.
  /D       Don't execute a TTY NO DM command; this overrides any NODM option
           present.
  /O       Keep the network connection open, if logging out while telnetted to
           WAITS.  If logging out while dialed up to WAITS, keep the phone
           line connected, overriding any HANGUP option.
  /C       Close the network connection, if logging out while telnetted to
           WAITS.  This overrides any OPEN option.

If you have the RPGSAV option (see below), LOGOUT will look for TMPCOR files
(simulated files in core storage) used by SNAIL to remember COMPILE- and
EDIT-type commands, and save them on the disk.  These TMPCOR files may exist for
different aliases you have used while logged in; all TMPCOR files with names CM
or ED, for any PPN, will be merged into files QSVCM.TMP and QSVED.TMP in your
login directory.  If you also have the LOGIN:RPGSAV option, these disk files
will be copied back into TMPCOR when you next log in, so SNAIL will remember
your commands from one session to another.  Note that the /F switch for fast
logout will prevent saving the TMPCOR files, and that fast login (LOGIN PRJ.PRG)
will not restore the disk files to TMPCOR.  Please bear in mind that if you
often alias to different directories, and you use the RPGSAV option, you can
easily accumulate a lot of saved TMPCOR files that you may no longer need.
Since any job has a fixed quota of TMPCOR files, you may run out.  To avoid
this, you should edit your QSVCM.TMP and QSVED.TMP files from time to time, to
eliminate unnecessary entries.  (Then log out /F so that your edits will not be
overwritten by LOGOUT!)

Note that if you have the RPGSAV option for LOGIN but not for LOGOUT, you can
create the QSVCM.TMP and QSVED.TMP files explicitly (create them /N--no
directory--if you use E) to have a permanent set of remembered commands.  Each
file must contain one line per alias, containing the PPN (without brackets), a
tab, and then the compile- or edit-type command.

Certain functions of LOGOUT are performed regardless of options or switches
used.  You are told if you have another job logged in with the same PPN, and if
you have assigned any private devices (mag tape, etc.), you are reminded to
unload them.  The "date last written" entry for your file directory is updated
to reflect your most recent logout (this information is used by FINGER).  If you
are not logged in elsewhere, and you have a file named LOGOUT.MSG, it is typed
and deleted.

There are two other monitor commands which run the LOGOUT program, for logging
in with another PPN and for attaching to an existing job (see the ATTACH
command, Section 4.4.)  They are

KLOG logout-switches ppn
KATTACH jobnum ppn logout-switches

The logout switches are as described above.  The other arguments are in the
required form for the LOGIN and ATTACH commands.

Finally, there is a LOGOUT command, which is exactly the same as KJOB but no
arguments are allowed.

Any of these commands, when typed at a PTY which is not owned by a Telnet server
(that is, not the virtual terminal of a network user), simply kills the job
without running the LOGOUT program.  This has approximately the effect of
KJOB/F.
                                   5.3  SNAIL


The SNAIL commands run the SNAIL program, which then runs various other
programs.  The commands are divided into three basic groups.  The first, for
text file editing, take a file specifier as argument:

  CREATE   create a file with SOS
  EDIT     edit a file with SOS
  MAKE     create a file with TECO
  TECO     edit a file with TECO

The other major editor, E, includes the necessary code to carry out the SNAIL
functions itself, e.g., default extensions and remembering the commands.  The
following commands are, therefore, not strictly SNAIL commands but function
equivalently:

  CETV     create a file with E
  ETV      edit a file with E
  EREAD    edit a file with E in read-only mode
  READ     edit a system documentation file with E
  BOOK     edit with E in book mode

The second group, for program compilation, take one or more program names or a
command string, along with various option switches:

  COMPILE  compile programs
  LOAD     compile and load programs
  EXECUTE  compile, load, and run programs
  PREPARE  compile and load with a debugger
  DEBUG    compile, load with a debugger, and start the debugger
  TRY      compile, load with a debugger, and start the program

  PUB      produce a document with the PUB document compiler
  POX      produce a document with the POX document compiler
  TEX      produce a document with the TEX document compiler

  RER      run a system program and give it a command string
  RERUN    run a user program and give it a command string
  PROCESS  pass a command string to the monitor

Finally, one more command, used in conjunction with the compile-type commands,
which takes no arguments:

  CREF     produce cross-reference listings from compilations

The complete description of the above SNAIL commands, with the command syntax
and the processing options provided, can be found in Appendix 1.
                              5.4  COPY and SPOOL


The next major group of commands runs the COPY program.  Their arguments are
generally in the form "new-file ← old-file":

  COPY     copy a file
  TRANSFER copy and delete the original
  RENAME   rename a file or change protection

The following COPY commands imply a destination, and take just one or more input
file specifications (separated by commas if more than one):

  DELETE   delete a file
  TYPE     copy to the terminal
  XGPLIST  copy to the Xerox Graphics Printer (XSPOOL is preferred)
  DIRECTORYtype file directory

The COPY manual explains these commands fully, along with various options
specified in the argument list; see Appendix 2.

For printing files, there are several general purpose printers available to
system users.  These include the line printer (on the SCORE system, actually),
the XGP, and the Dover (on the Ethernet).  (As this manual goes to press, it is
expected that very soon there will be Canon printers available too.)  To control
normal output to these printers, there is one phantom job assigned to each such
printer.  These jobs are called spoolers, and making a printing request is
called spooling a file.  Each spooler decides, on a priority basis, which file
will be printed next, the priority being based on the size of the spooled file
and how long it has been waiting.  Spooling requests are recorded in temporary
disk files which are read and processed by the spoolers.  The user makes,
deletes, or examines a spooling request with one of the commands shown below.

  SPOOL    request SCORE line printer listing of specified file(s)
  XSPOOL   request XGP listing of specified file(s)
  DOVER    request Dover printing of specified file(s)
  UNSPOOL  allow selective deletion of spooler requests
  QSPOOL   display spooler status and queues

The SPOOL commands also allow printing options to be specified in the argument
list; see Appendix 3 for details on the forms of the above commands.

The commands in this section all require that you be logged in, except for TYPE,
DIRECTORY, and QSPOOL.
                                   5.5  MAIL


Several commands are provided for sending messages to other users.  Messages can
be filed on disk, so that the addressee will be notified about them by LOGIN, or
they can be sent directly to the terminal of a logged-in user.  There is also an
automatic reminder system which allows messages to be sent or programs to be run
at a later time.  The commands used for these purposes are:

  MAIL     send a message to one or more message files
  SEND     send a message to the terminals of one or more users
  GRIPE    send a message complaining about a system problem
  REMIND   schedule a message to be sent at some later time
  PLAN     create a file describing how to find you when not logged in
  EVENT    send a message to all users about an event on a given date
  BATCH    schedule the execution of a command string at some later time
  LATER    schedule the execution of a given program at some later time
  RETRY    send any messages which were queued by earlier failing operations
  NAME     give a user's real name and tell if and where his mail is forwarded
  ETV ∂    edit E-format message file
  RCV      edit non-E-format message file
  CANCEL   delete REMIND, BATCH, or LATER requests or queued mail
  CKMAIL   see if there are new messages for a user

The usual format of the MAIL and SEND commands is

MAIL user message
SEND user message

where user is a programmer name and message is the one-line text you want sent.
If you do not include a message in the command, the MAIL program will ask you to
type a message, which may then have more than one line.  The complete
description of these commands is in Appendix 4.

The commands in this section require that you be logged in, except for MAIL,
SEND, GRIPE, NAME, RCV, and CKMAIL.
                                   5.6  DART


DART is a program to save disk files on magnetic tape and restore them as
needed.  It also handles mag tape positioning commands.  The file dumping
commands take disk file names as arguments.

  DUMP     dump disk files onto tape
  REAP     mark file(s) to be P-dumped twice and then deleted
  UNREAP   remove the reap-mark from file(s)
  RESTORE  restore files from tape to disk
  PUMPKIN  ask the Great Pumpkin to restore your files later
  UNPUMPKINallow selective deletion of PUMPKIN requests
  PLIST    list all PUMPKIN requests
  LOCATE   find which tape has dumped copy of files
  TLIST    list all files on a tape
  TURKEY   tell who last used a given DART tape

The tape positioning commands are:

  REWIND
  ADVANCE
  BACKSPACE
  EOT

The complete documentation of these commands is in Appendix 5 of this manual.
                                    5.7  DO


The DO program allows automatic execution of an arbitrary sequence of commands.
By writing DO command files, you can make your own sequences of program
execution analogous to the SNAIL compiler-loader-execution sequence.  The DO
command takes as arguments a filename and an optional function name or number in
parentheses.  The default filename extension is .DO.  The specified text in the
file is simply transferred into your terminal's input buffer, as if you had
typed it.  Then the DO program exits, and the monitor processes the commands
that came from the file.  A single file can contain any number of functions to
be selected by name or number, and in fact it is generally recommended that you
put all your DO functions into one file in order to save disk space.

The amount of text loaded from a DO command is limited by the capacity of your
terminal's input buffer (currently 95 characters, plus, on display terminals
only, one unactivated line editor line of about 160 characters).  You can
sometimes circumvent this limitation by the following trick: if the command
string to be processed by DO ever leaves you at monitor command level, you can
insert at that point in the string a DO command to process another function; the
DO command must appear as the last thing in the string--subsequent commands
should then appear in the next DO function indicated.  This trick can be
repeated any number of times--simply make the last command in each DO function
be a DO command to reference the next function.  The DO program cannot be run by
detached jobs, since such jobs have no terminal for DO to simulate typing into.

DO does some conversion of certain characters in the file, to allow things like
CONTROL and META characters.  The characters which are processed specially are:

  RETURN   ignored
  LINE     ignored
  ↔        translated to RETURN followed by LINE
  ↓        translated to LINE
  ≠        translated to ALT
  λ        translated to deferred CALL (one ↑C)
  α        adds CONTROL bit to the following character
  VT       adds CONTROL bit to the following character
  β        adds META bit to the following character
  FORM     adds META bit to the following character
  ⊗        translated to ESC
  ⊗-       translated to BREAK
  |        separates different DO functions (see below)
  ≡        quote the next character (do not process it specially)
  ?        takes the next character (other than RETURN or LINE or "\") as a
           variable name.  Suppose the character is A (i.e., ?A).  If this is
           the first occurrence of ?A in the file, DO types out "A=     " and
           waits for you to type in a text string ending with RETURN.  This
           string is substituted for every occurrence of ?A in the file.
  ?\       defines the next character as a special single escape character,
           otherwise known as the brick character.  That character can then
           used to call various extended commands.  See below.

Note that ESC and BREAK commands from a DO file are executed by the system
immediately while DO is running, rather than after DO exits, because these
commands do not go into the terminal's input buffer.

To allow more than one DO function to be stored in the same file (because small
files are inefficient in using disk space), the vertical bar ("|") character can
be used as a separator of functions.  The command

DO DOFILE(GO)

will DO the commands that follow "|GO:" in the file, up to the next "|".  You
can also call functions by number instead of name; for instance,

DO DOFILE(3)

will DO the commands that occur between the second and third "|" characters in
the file.  In calling a function by either name or number, the right parenthesis
can be omitted.  The case (upper or lower) of letters in a function name is
ignored, and almost anything reasonable can be used as a name.  Essentially, it
cannot be a number (because you can't specify it), or empty, or contain a colon
or vertical bar.  If you have more than one identically named function, the
first one is the one DO uses.  You can specify a named function by number, but
in that case the name and colon become part of the function.  (The extended
\FLUSH.  command can be used in this case, if it's really a problem.)

The DO command remembers its argument in a TMPCOR file, so that you can type DO
without an argument to repeat the same command file.  Also, the DO command is
remembered as if it were a COMPILE-type SNAIL command, so that the SNAIL exit
mode commands in the text editors will also repeat the DO command.  Thus, users
of languages like LISP which are not recognized by SNAIL can write DO files to
run LISP and read in their programs.

If you give the command DO FILE with no explicit filename extension, then DO
will first look for FILE.DO, and if that doesn't exist, it will look for FILE.
To force DO to use the file with the blank extension, include a dot in the
filename, as in "DO FILE.".

The DO program ignores E directory pages, FORM characters found in E-format
files, and SOS line numbers.
                   Extended DO Features--the Brick Character


DO provides some additional text manipulation techniques beyond the basic one of
taking text from a DO file and putting it into your terminal's input buffer.  To
use these extended DO features, you must specify a special escape character that
will appear in the DO file.  Following the POX convention, we will call this
escape character the "brick".  We will use the backslash character "\" as the
brick character in examples of the extended features.  We will also use BNF
style angle brackets to enclose syntactic entities, for example, <char> will be
used to denote any character.

To specify a brick character use the sequence

        ?\<char>

This makes the <char> the brick character.  For example, to specify backslash as
the brick character use

        ?\\

Note that each segment in a DO file must set the brick if it uses it.

The brick character appears as the first character of all the extended commands.
Subsequent characters are scanned to determine the command and to get any needed
arguments, etc.  Then normal processing is resumed until the brick character is
encountered again.

If the extended command is denoted by a special keyword, the keyword is
delimited on the right by a dot character "." and may be in upper and/or lower
case letters.

The extended commands will be grouped below in terms of related functions.
                          Special Character Generation


The following commands are used to cause special characters to appear in the
terminal's input buffer.  They are somewhat redundant, and mainly provide
alternates for the regular DO commands without using obscure characters
themselves.  Most users will never need any of these, as the single-character
versions are used more often.


  \CR.     Return (same as ↔)
  \LF.     Line (same as ↓)
  \ALT.    Altmode (same as ≠)
  \TAB.    Tab
  \VT.     Vertical tab
  \FF.     Formfeed
  \BS.     Backspace
  \C.      Add CONTROL bit to following character (same as α or VT)
  \M.      Add META bit to following character (same as β or FORM)
  \CM.     Add both CONTROL and META bits to following character
  \"<char> Quotes <char>, like ≡ except that this command will NOT quote a
           vertical bar character!
  \'<octal>Generate character with given <octal> value in WAITS ASCII
  \=<decimal> Generate character with given <decimal> value (in rare cases the
           user may need to delimit the numbers with \.)
  \↑<char> Generate ASCII-control character (e.g., \↑G makes π)
  \?<char> Generate SOS style character (e.g., \?G gets lower case g)
                          System Character Generation


  \CALL.   Generates a deferred call (same as λ)
  \ESC.    Preceeds an ESC or BREAK command (same as ⊗) Note: WAITS restricts
           which escape commands are allowed.  Also, they are done when
           scanned and not passed on.
  \CLEAR.  Clears the input buffer (with a CLRBUF UUO).
                         Activation Table Manipulation


These commands alter your activation table with the SETACT UUO.  This is mostly
useful for bypassing the line editor for programs (e.g., RAID) which use lots of
control characters which are also line editor commands.

  \NOLINED.Suppresses the line editor (sets the ALLACT bit)
  \LINED.  Unsuppresses the line editor (clears the ALLACT bit)
  \NOCONBLT. Suppresses control B, L and T only (sets the SUPCT bit)
  \CONBLT. Unsuppresses control B, L and T only (clears the SUPCT bit)
                          Brick Character Manipulation


Actually, ?\<char> pushes the old brick on a stack.  Hence, to pop the old brick
off the stack and make it the brick again, use:

  \POPBRICK. Restore old brick by popping it back from stack.
                                Typing Out Text


To print one line of text without a carriage return, you can use the extended DO
command:

  \PRINT.<char><string-sans-char><char>
           This prints the included string.

This command cannot print RETURN or LINE, since these are removed from the input
earlier in the scan.  To print a RETURN and LINE, use:

  \NEWLINE.This prints a RETURN followed by an LINE.

To load the line editor, for example to set up the default response to a \INPUT.
command (see below), use the command:

  \LOADED.<char><string-sans-char><char>
           This loads the line editor with the included string.

To turn echoing off and back on, for instance to hide a password being passed to
DO, use this command:

  \FLIPECHO. This alters the state of echoing, turning it off when on and vice
           versa.
                            Macro Variable Commands


There is a set of 128 string variables, whose 128 names are all the 128 single
characters in the WAITS ASCII character set.  In normal mode scanning, these are
set and called with the ?<char> command.  The following commands allow a limited
amount of manipulation of these strings.  The symbol <macro> will stand for the
character which is the name of the macro variable.

  \←<macro><char><string-sans-char><char>  Sets <macro> to delimited string

  \INPUT.<macro>                           Reads <macro>'s definition from the
                                           terminal

  \&<macro1><macro2><macro3>               Defines macro 1 to be the
                                           concatenation of the current strings
                                           of macros 2 and 3

  \INSERT.<macro>                          Patches <macro> directly into the
                                           output, unlike the ?<macro> command
                                           which causes it to be rescanned
                            Output Control Commands


Output is placed in the input buffer by default.  It can also be appended to a
macro.  In addition, output characters may be "unsaid", that is, taken back.
The following commands provide these and some other related capabilities.

  \PUSHOUT.<macro> Causes subsequent output to be appended to <macro>

  \POPOUT.         Returns to previous output destination

  \UNSAY.<number>  Causes the given (decimal) number of characters to be removed
                   from the end of the output destination, i.e., the output is
                   "backspaced".  If more characters are "unsaid" than are
                   there, the result is a \FLUSH.  See the examples.

  \FLUSH.          The destination is completely cleared, essentially like
                   "\UNSAY.∞",

  \TELNET.         If you are on a non-display, your terminal will be put into
                   "image mode" when all subsequent characters are being loaded
                   into the input buffer.  This is useful if the input is to be
                   read by TELNET, which puts non-displays in image mode.
                             Miscellaneous Commands


Here are three special commands, including one for putting comments in your DO
file.

  \;<char><string-sans-char><char>
           Ignores the included text, allowing comments in the DO file

  \.       Does nothing--can be used to delimit numbers

  \BEEP.   Beeps your terminal
                                   5.8  ZERO


The ZERO command is used to clear file directories on disk or DECtape.  The
command takes a device name as argument; the device must be DSK, DTAn, or UDPn
(user disk pack).  If you do not type the word ZERO in full, it will not accept
the device name on the command line, and will ask for it later.  This is a
safety feature in case you mistype some other abbreviated command.

For DECtape, ZERO simply executes the UTPCLR UUO, which tells the monitor to
initialize the file directory for the DECtape unit you specified.  Make sure you
don't get the wrong unit number and zero someone else's DECtape!

If you specify device DSK, you must confirm (by typing Y) that you want to
delete all the files in your disk area.  ZERO then attempts to delete each file
in your area.  For each file, it types # if successful, otherwise a message
indicating the reason for the failure (write protected, etc.).  You cannot use
the ZERO DSK command if you are aliased.

The ZERO program is not used for new format (file structured) UDPs.  It can be
used to change the password of an old format UDP, and also allows the
initialization on such a UDP of the file structure formerly used by the COPY
program, although this feature is now obsolete.  The UFD command (see page 86)
is used to set passwords and create file directories on new format UDPs.
                                    5.9  WHO


The WHO command (abbreviated W) runs the WHO program, which displays system
status information at your terminal.  If you are at a display terminal, the
information is automatically updated as long as the program continues to run.
If you are at a non-display, the information is only typed once.  The WHO
command does not require that you be logged in.  WHO accepts various commands,
described later, to control what information is presented.

The first part of the WHO display is a list of the jobs on the system, with
various information about each job.  This list is divided into two sections, for
jobs belonging to users and for system phantom jobs.  (More precisely, the
second section contains jobs which are detached and have the JLOG bit off in the
job status word, i.e., are not logged in.)  Jobs attached to pseudo-teletypes
are listed under the controlling job, with the line for the controlled job
indented.  The listing for each job has several parts:

  Job      job number
  Queue    queue name, as in the wholine, with possibly an extra character
           indicating one of several states (if more than one applies, the one
           which comes first in this list is displayed):
           ←  the job needs to be swapped in, e.g., for a monitor command
           -  the job is now actually running
           ⊗  the job is locked in core
           →  the job's upper segment is next in line to swap in
           ↑  the job is next in line to be swapped out
           ↓  the job is next in line to be swapped in
           *  the job is swapped out
  PPN      the job's logged-in PPN ("100100" for not-logged-in WHOs, etc.)
  TV       the physical DD (if any) responsible for the job's line
  Line     the job's terminal line number, or DET for detached jobs
  Jobnam   the job name
  Size     the job's core image size in 512-word pages
  Time     the job's total run time since login
  PL       percentage of CPU time spent on this job recently
  Seg      job number of this job's upper segment
  SWR      number of ticks between startups of job's spacewar module
  Alias    the job's ALIAS PPN

After the job display comes a display for upper segments, containing the job
number (possibly followed by one of the above single-character markers), the
letter W if the segment is not write protected, the job name, core size, and
number of jobs using the segment.

The next part of the WHO display is a summary of overall system statistics.
This includes the time since the system was last restarted (Up Time); short and
long term time spent running the null job (Null Time); short and long term time
spent running the null job when another job wanted to be run but wasn't in core
(Wasted); the number of jobs waiting to access the disk (Disk Queue); total user
core image sizes in core and swapped out (Core); the total available user core
not used by locked-in jobs, and the total available user core (Usable); the
number of jobs in RUNQ and TQ and their combined core image size (Running Jobs).

The final section of the WHO display is a list of all I/O devices in use by
programs or assigned by jobs.  For each such use of a device, a line is
displayed containing the logical name, if any; the physical name; the character
"#" if the device was assigned by the ASSIGN command; the job number using the
device; if a particular file is open, the file name, extension, and directory
ppn (for disk files), the number of records in the file, the record currently
being read or written, and the read/write status.  This last will be W if the
file is open for output, R for input, or RA for read/alter mode, followed by E
if the end of file has been read.  Note: if the file has been closed, there may
be no mode flag, and a large number like 577 in the current-record position.
Record numbers are displayed in decimal.
                                  WHO commands


WHO accepts commands to determine what information is to be presented.  These
are single-character commands, and should not be followed by carriage return.
However, some of the commands must be followed by an argument, which is ended
with carriage return; ending such an argument with alt mode will abort the
command.  WHO commands may be included on the monitor command line which starts
the WHO program running, or can be typed separately while the program is running
(the latter on display terminals only).  Only one WHO command which takes an
argument can be included on the monitor command line, and it must be the last
thing on the line.

On display terminals, only part of the information can fit on the screen at a
given time.  Certain commands provide "scrolling" of the display up or down;
these commands are ignored on non-displays.

The available commands are listed in the table below.  Other characters will be
ignored.  If no command is typed to a WHO running on a display for two minutes,
WHO will exit, unless the ∞ command has been given.  After WHO exits, typing
CONTINUE to the monitor will tell WHO to continue presenting the same
information it had been presenting when it exited.

The following commands apply only to display terminals:

  ↑ (or ;) scroll up 1/2 screen
  ↓ (or :) scroll down 1/2 screen
  FORM     (formfeed) scroll up whole screen
  VT       (vertical tab) scroll down whole screen
  0-9      repeat argument for ↑ ; ↓ : FORM VT
  ∞        run for ten minutes instead of only two after the last given
           command
  H        Hold the display; update the screen once and then stop updating it
           (but don't exit yet).  While you are holding, any command that
           affects what is displayed will update the screen once, but holding
           will remain in effect.
  αH       (CONTROL-H) Un-hold the display; resume updating it.
  U        Update screen.  Used only for individual display terminals, for
           which WHO normally rewrites only the information which has changed
           since the last display.  This command forces a complete redrawing
           of the entire screen.
  RETURN   Exit normally, clearing the screen and redrawing the normal page
           printer.
  SPACE    Same as RETURN--exit normally.
  LINE     Same as RETURN--exit normally.
  E        Exit but leave the latest text displayed on the screen, with the
           page printer set up to avoid erasing the text

The following commands apply both to displays and to non-displays:

  R        only display jobs which have recently been Running (not in NULQ,
           STOP, IOWQ, or INTW)
  N        restore Normal display (all jobs)
  T        Type out the job information only (not system statistics or file
           information).  On a display, exit after typing the information
           once.
  F        Like T, but type File information also.
  Q        Type once only a Quick display of jobs which are not detached,
           typing only their PPNs and TTY numbers.
  D        Devices--display only the Devices (e.g., files) open, not the jobs.
           Also resets window back to top of text.
  J        Jobs--display Jobs (undoes D command) as well as devices.  Also
           resets window back to top of text.
  B        Big files--omit from the display any files that are not disk (or
           UDP) files at least 16K in size.  nB, where n is a digit, sets the
           minimum size to n*16K, where n=0 is the default (only one digit is
           allowed in n).
  O        Omit statistics (uptime, null time, etc.) from display.
  I        Include statistics (undoes O command).
  M V * " + - &   These seven commands allow you to specify which jobs should
           be displayed.  These are explained below.

WHO keeps two special tables of job specifications for deciding which jobs it
will display; these tables are called the PLUS table and the MINUS table.  Jobs
specified by the MINUS table will not be displayed (regardless of other
conditions).  The PLUS table is ignored if empty; but if it is non-empty, then
only jobs specified by the PLUS table are displayed; however, jobs specified by
both tables will NOT be displayed, since the MINUS table has priority.  Both
tables are initially empty, and the R and N commands reset both tables to empty.
Jobs can be specified in these tables by project name, programmer name,
project-programmer name, job number, or job name.  Each of the commands
* + - " & takes an argument which should be ended with a carriage return; if an
argument is ended with an altmode, the command will be aborted.  WHO will beep
you if an argument is not accepted (illegal argument or aborted with altmode).
The commands M and V take no argument.  The argument to & is a filename, the
argument to " is a job name, and the argument to each of the commands * + - is a
job specification which can be any of the following forms:

  PRG      programmer name (letters and digits only)
  ,PRG     programmer name (letters and digits only)
  PRJ,     project name (letters and digits only)
  PRJ,PRG  project-programmer name (letters & digits only)
  NUMBER   a decimal job number (digits only)
  "NAME    a job name (any sixbit characters after ")

A job will match specifications of the first four types if either its logged-in
PPN or its ALIAS PPN matches the specification.  Any job running on a PTY owned
by a job being displayed will also be displayed, unless the job on the PTY
matches a specification in the MINUS table.  If a job running on a PTY is
displayed and its controlling job is not displayed, then the job on the PTY will
be indented using dots (.) instead of spaces (which would be used if the
controlling job were being displayed).

The seven individual commands are described below.

  M        only display jobs matching your logged-in programmer name or your
           ALIAS programmer name (clears both tables and then puts your
           logged-in programmer name and your ALIAS programmer name into PLUS
           table)
  V        only display jobs belonging to volleyball players (simulates an
           &VB.DIS[P,DOC]--see "&" below)
  *<spec>  only display jobs matching the specification <spec> (clears both
           tables and then puts <spec> into PLUS table)
  +<spec>  also display jobs matching <spec> except those matching entries in
           MINUS table (adds <spec> to PLUS table and removes <spec> from
           MINUS table); leaves running-jobs-only mode.
  -<spec>  don't display jobs matching <spec> (adds <spec> to MINUS table and
           removes it from PLUS table)
  "<name>  only display jobs with the job name <name> (clears both tables and
           then puts <name> into PLUS table)
  &<file>  clear PLUS and MINUS tables and then put job specifications from
           the file <file> into the tables.  E directory pages and SOS line
           numbers are permitted and ignored.  The default extension .DIS is
           used if no extension is typed.  If no PPN is typed, the disk area
           [P,DOC] is tried first, then your own disk area, to find the file.

While reading from a file, spaces are ignored (except in a job name).  A
semicolon not in a job name causes the rest of the line to be ignored.
Non-SIXBIT characters (except lower-case letters, which are converted to upper
case) are treated like CRLFs.

An entry in the file can be any of the forms listed below, and should be
terminated by a comma or a CRLF.  Note however that a comma (or any other sixbit
character including semicolon and space) appearing as one of the first 6
characters of a job name will be taken as part of the job name.

  +<specx> Add the specification <specx> to PLUS table.
  <specx>  Add the specification <specx> to PLUS table.
  -<specx> Add the specification <specx> to MINUS table.

Unless all entries in the file are of the form -<specx>, WHO leaves
running-jobs-only (R) mode.  A job specification in a file, <specx>, can be any
of the following forms (note that these are slightly different from the forms
for <spec> that you can type in):

  PRG      programmer name
  [PRG]    programmer name
  [,PRG]   programmer name
  [PRJ,]   project name
  [PRJ,PRG]project-programmer name
  "NAME    job name.  After the " the first 6 characters (or less if
           terminated by a CRLF) are taken as a job name.  Then characters are
           skipped until a comma or CRLF is seen.

Note that you cannot specify a job number from a file.

If WHO is started with the REENTER command, it makes a listing of its
information display on device LPT.  Since there is no LPT (line printer) on
SU-AI, you should assign some other device, e.g., DSK, as LPT (A DSK LPT) before
using REENTER.  The information sent to LPT will be controlled by the WHO
commands in effect when WHO last exited, if any.

As special features, you can use the WHO command to run a few other programs.
First, the command WHO A runs SYS:IMPSTA to show network status.  Secondly,
WHO L runs SYS:DLNSTA to show DialNet status.

Finally, the command WHO user%host (user is optional) types once only a WHO-like
status report on the specified user, or all users if none specified, at the
given network host.  The exact format of the report depends on the host
selected.  For incompatibility, this network command can use an "@" instead of
an "%".  In that case, however, if the "user" is omitted, then WHO will first
interpret what follows the "@" as a filename, and if there is no such file, then
WHO will assume that it is a host name instead.
                                   5.10  FIND


FIND is a system command that causes a search for a specified key in a specified
file.  The FIND command has the following syntax:

  FIND[ WITHIN <delim>][ SURROUND <num>] <key>
        [ OMIT[TING][ ONLY] <omits>] [ IN <file>][ WRITING <file>]

where [] indicates optional elements.  There are also DFIND and OFIND commands
with the same syntax (except for the command name).  <key> is the string of
characters to be found in the file <file>, <omits> are characters to be ignored
in the file, <num> is the max number of lines to print on either side of a
"hit", and <delim> is either a single character or one of the following words:
MSG LINE PAGE PARAGRAPH GRAF.

Now for some details.
                              File to Be Searched


The default file to be searched is the phone directory.  If you use the DFIND
command, the default is the unabridged dictionary word list.  You can specify
your own default via the OFIND command (see below).

To specify a file to be searched other than the default, use the IN <file>
clause.  Certain special names are recognised in this clause: PHONE gets you the
phone directory (without having to type its full name), DICT gets you the
dictionary, FORWARD gets you the file of mail-forwarding entries, and ∂ (partial
sign) gets you your mail file.  You can optionally follow the ∂ with (1) a
programmer name to specify a mail file other than your own, or an asterisk (*)
to specify the system message mail file NOTICE.TXT, and/or (2) an extension to
specify one other than .MSG (or .TXT), and/or (3) a PPN to specify one other
than [2,2].  You can specify a device other than DSK, using the usual syntax.
                               What Gets Printed


When a match is found, the "unit" of the file that includes the last character
of the key is printed, where the "unit" is determined by the <delim>.  The
default unit is the PARAGRAPH except for the DFIND command, for which the
default is the LINE.  If the partial-sign (mail) filename specifier is used, the
default unit is MSG, and if the FORWARD filename is used, the default unit is
LINE.  You can override these defaults using OFIND or the WITHIN clause (see
syntax above).  The delimiter <delim> can be specified as a single character or
it can be specified by one of the following exact names:

        MSG  LINE  PAGE  PARAGRAPH  GRAF

where MSG means that partial sign (∂) is the delimiter (designed for use with
mail files), LINE means that the end of a line is the delimiter (i.e., only the
line on which the key ends will be typed), PAGE means that formfeed (a pagemark)
is the delimiter, and PARAGRAPH or GRAF means that a blank line or pagemark is
the delimiter.

The delimiter character will be treated as a delimiter only if it occurs as the
first character on a line; a line starting with the delimiter character is
considered the first line in a new text unit, and the previous line is the last
line in the previous text unit.  Text units may span page boundaries (except for
PAGE, PARAGRAPH, or GRAF); the pagemarks are not printed.

Within a single delimited text unit, up to 25 lines can occur both before and
after the line in which the key is found.  If more than 25 lines occur before
and/or after the key but within the delimited text area, an ellipsis (. . .)
will be typed out before the first line typed out and/or after the last line
typed out.  Further occurrences of the key within the same text unit will not be
detected unless the 25-line limit is exceeded and the key occurs entirely after
the last line typed.  Normally (i.e., if the text unit ends within 25 lines
after the key) the search picks up starting with the CRLF (carriage return line
feed) ending the last line printed; thus the CRLF can be used as part of the key
to search for occurrences only at the beginnings of lines (in fact, FIND
pretends there's a CRLF at the very front of the file, so that finding hits at
the front of the first line works as expected).  The 25-line limit can be
extended or truncated using the SURROUND clause in the command line.

Each separate text unit containing the key is a "hit" and is typed out, with
each line of text preceded by an asterisk (*) except that the line in which the
key occurs is preceded by a greater-than sign (>).  Also, the hits are counted
and the count is printed after the whole file has been searched.  (Multiple hits
within a single text unit may occur; see preceding paragraph.)  In the printout
the hits are separated by blank lines.  EXCEPTION: If the <delim> is LINE, then
no blank lines are inserted and the "*" and ">" prefixes are omitted.
                             What Gets Searched For


Here's where things get interesting.  Within the <key>, certain characters have
special interpretations, as listed below:

      comma   Separates two strings to be searched for simultaneously; that is,
              FIND FOO,BAR,BAZ will search for FOO, BAR, and BAZ.  Simultaneous
              searches like this take no more (or less) time than searching for
              a single string.
     letter   Matches either upper- or lower-case in the file.
       'xxx   Character with ascii code xxx (octal); e.g., '044=$.  E.g.,
              FIND q'015 will look for lines ending with "{ }q"{ } (or "{ }Q"{
              }).
      {xyz}   Any of the characters xyz; any number of characters may be given
              between the braces, and they may include any of the constructs
              listed here except comma, infinity, or another `embraced' string.
              For instance, FIND ≡M{s¬∃≡,} searches for an upper-case M followed
              by either a lower-case s or an upper-case S or a CR, LF, tab,
              space, formfeed, or comma (see below regarding "{ }≡"{ }, "{ }¬"{
              }, "{ }∃"{ }).
          ∀   Any character.
          ∃   Any character except CR, LF, tab, space, or formfeed.
         ¬x   Any character except x (x can be a multi-character construct such
              as {xyz} or ∃).
          |   Equivalent to ¬∃, i.e., any of: CR, LF, tab, space, FF.
         ≡x   The character x (used to quote these special characters; can also
              be used to quote a letter to enforce either upper- or lower-case).
         ∞x   Any number (including zero) of repetitions of x (x can be a
              multi-character construct; see examples below).
      space   Equivalent to ∞|, i.e., zero or more spaces, tabs, CRLFs, and
              formfeeds; to match precisely one space, quote the space with `≡'.

Note: The time taken by the search is independent of the complexity of the key,
although extremely complex keys may take a few seconds to initialize the search.
(This does not consider the time taken to print the hits.)  For example,
searching for any key in the dictionary (about 2.9 million characters of text)
takes about 6.5 seconds of Ebox time.
                         Putting The Results in a File


If you include a WRITING clause in your command, then the only thing printed on
your terminal will be the number of hits, after the entire file has been
searched.  The actual hits (if any) will be written in the specified file.  If
you specify WRITING NOTHING, then the hits will be completely discarded, but you
will still be told how many there were.  Like the file being searched, the
WRITING file can be on a device other than DSK.
                                The OMIT Clause


The OMIT (or OMITTING) clause in the syntax above lets you specify certain
characters to be ignored during the search.  The default is '012'000, i.e.,
ignore linefeeds and nulls.  (Thus carriage returns may be used as
single-character delimiters around lines.)  If you include an OMIT clause in
either your command line or your OFIND option line (see below), the characters
specified are omitted IN ADDITION TO the default characters, UNLESS you specify
"OMIT ONLY".  Thus OMITTING '014 omits linefeeds, nulls, and formfeeds, while
OMITTING ONLY '014 omits only formfeeds.  The <omits> string takes precedence
over the <key>; i.e., FIND XYZ OMITTING Y is guaranteed to find zero hits.

The <omits> string may include any of the special constructs listed above for
the <key>, except for the "∞" and "space" constructs.
                               The OFIND Command


If you use OFIND (currently abbreviatable to OF) instead of FIND in the syntax
above, it is exactly like FIND except that the OPTION.TXT file on your login
area is scanned for a line beginning "FIND:" (case of letters is ignored) and,
if found, the line is used to override various defaults.  The format for the
line is:

        FIND:[ WITHIN <delim>][ OMIT[TING] <omits>][ IN <file>][;]

Any fields not specified in OPTION.TXT retain their usual defaults as defined in
the preceding sections.  As a special case for compatibility with an earlier
version of FIND, the line may read:

        FIND:<file>[;]

to specify a default file without affecting the <delim> and <omits>.  If you
have more than one file you like to search a lot, you can set up multiple
OPTION.TXT lines of the form:

        FIND/<ident>: etc.

and the command OFIND/<ident> etc. will use the specified option line.  OFIND
with no /<ident> will use the first FIND option line it comes to.
                                    Examples


Here are some examples of using the various forms of the FIND command.

        FIND [LES:

will print out the entry for LES in the phone directory.  (The "[" and ":" keep
it from finding arbitrary words that happen to contain the string "les", since
in the directory the programmer name field is surrounded by those characters.)

        FIND garply baz in ∂

will search your own mail file for "garply baz" and type out the entire
message(s) it occurs in.

        FIND ≡  ME in ∂*
    or  FIND '011ME in ∂*

(that's ≡<tab>ME in the first one) will find all system messages (in
NOTICE.TXT[2,2]) from ME.

        FIND president in ∂.nap

will search your News Service notification file on [2,2] for all notifications
containing "president".

        FIND RUN IN IN IN

will search for "RUN" (ignoring case) in a file with the unlikely name "IN IN".
The ≡ construct can be used to override this, as in

        FIND RUN≡ IN IN IN

which searches for the phrase RUN IN in the file named "IN", since the quoted
space prevents the first "IN" from being taken as a filename lead-in.

        DFIND k∞{aeiou}k WRITING kk

will search for all words in the dictionary containing two k's (upper- or
lower-case) with nothing but vowels between them, and will put those words into
a newly-written file called KK on your area.

        DFIND |≡a∃∃∞∃{pt}¬{aeiou|}

will search for all words beginning with (due to the initial "|", which matches
only a CR, LF, tab, space, or formfeed) a lower-case `a', followed by two or
more non-delimiting characters, followed by either a `p' or a `t', and then any
non-delimiter other than a vowel.

More example commands:

        FIND MCCARTHY
        FIND TARGET BYTE in COMLIN.FAI
        FIND LOMA VERDE
        FIND EVENT IN ∂*
        FIND ≡ E≡  IN ∂*
        FIND WITHIN MSG PDP-11 IN OUTGO.MSG
        FIND WITHIN PAGE UDPUFD IN MONCOM.BH[S,DOC
        DFIND weird,wierd
        FIND john∞∀lathrop

Example output for the last example command:

*McCarthy, John (Prof. John)  - Professor                [JMC: FR] 1700 200
*        MJ356; 7-4430                                         Sep 4
>        846 Lathrop Dr. ⊗ Stanford, CA 94305, 857-0672

1 hit on key "john∞∀lathrop".
                               Using DFIND From E


The E editor has an extended command ⊗X DFIND that interfaces with the FIND
program.  (Note that the ⊗X FIND command in E is something else entirely!)  E's
DFIND command starts up a phantom job to do the search, and a summary of the
results are sent to your terminal.  The summary includes the number of hits, as
well as the first, last, and (if different) shortest "hit" lines.

The syntax of the DFIND command in E is the same as that of the monitor command,
with the same defaults for the WITHIN, OMIT, and IN clauses.  If you use
"DFIND/<ident>", the defaults are overridden using your OPTION.TXT, as if you
had invoked OFIND.  (This is not permitted with the monitor command.)  If you
specify a WITHIN other than the default of WITHIN LINE, then the text units
containing the first three hits (instead of the first, last, and shortest) will
be sent to you; this will probably overflow the page printer at the bottom of
E's window, so you'll have to use BREAK N to see the whole text.  Only 3 lines
on either side of each hit are included (instead of the usual 25), though you
can as usual override this with the SURROUND clause.

If you want to see more than just the summary of hits, you can use the WRITING
clause to send all the hits to a file.  If you just want to see how many hits
there are, without even the summary, say WRITING NOTHING.

If you don't give anything on the DFIND command line in E (i.e., if you just
type ⊗X DFIND<cr>), the current line of text (or the first line of attached
text, if any) will be used to specify the search parameters.
                                  Final Notes


If you type just FIND (or DFIND or OFIND) without providing a <key>, you'll get
a summary of the command syntax and special <key> constructs.

The special sequences currently recognised within the <key> string allow
specification of a subset of regular expressions.  The main loop of the FIND
program could just as easily handle any regular expression without slowing down
any, but FIND's author (Don Woods) doesn't "feel like writing a parser for the
darn things." If someone wants to provide a SAIL program that converts regular
expressions into a transition table for a finite state machine, he'll consider
building it into FIND.
                                     EFIND


The EFIND command runs the EFIND program, which is similar to FIND in purpose,
but works only on E-formatted files (i.e., files prepared with the editor E) in
which the entries are sorted and are WITHIN PAGE.  If your file meets these
format restrictions, it runs faster than FIND.  The program is documented in the
file EFIND.RSP[UP,DOC].
                    5.11  Other System Information Programs


This section describes other commands which run information programs.  All of
them except DSKSIZ are allowed to be run without logging in.

The WHERE command types out information similar to WHO for jobs belonging to a
particular user.  It takes a PPN or programmer name as argument, and for each
job whose login PPN matches the argument types out the job number, PPN, job
name, core size, queue, total run time, idle time (real time since last run),
terminal, and alias if any.  If the job is logged in over the a network, the
host from which the connection was made is also shown.  (The terminal is listed
by type and unit number, e.g., DM-1, TTY-36, III-60, DD-66, PTY-161.  Note that
these are not actual physical device names recognized by the system, except for
TTYn.)  If no argument is given, all jobs will be listed.

If you are logged in and run WHERE, you can give the REENTER command and type in
a job name.  WHERE will then list all jobs with that job name.

If WHERE doesn't find the specified user logged in, then it will swap to the
WHEN program (see below), which will report when the given user last logged out.
This does not apply to the job name feature of WHERE.

The WHEN command tells you the time of last logout for one or more users, and
whether or not they are now logged in.  Arguments can be programmer names or
PPNs (without brackets), and are separated by semicolons.  For example,
WHEN DON;S,SYS;*,JMC will report on the last logout for any of DON's PPNs, for
the specific PPN [S,SYS], and for each of JMC's PPNs separately.

The FINGER command also lists jobs belonging to a particular programmer, but
provides different information: the job number and job name, the programmer
name, the real name of that programmer if known to the system, the number of
minutes since the job was last run (followed by a dot if the job is stopped),
the terminal number (and type, as in WHERE), and the actual location of the
terminal (room number, if in the lab, and whose office it is).  Unlike WHERE,
for a Data Disc terminal FINGER shows the number of the physical terminal
responsible for the line, not the TTY line number.  The number will be shown in
the form TV-n if the physical terminal screen is looking at the line belonging
to that job, or as tv-n (lower case letters) if not.  In other words, if the
same physical terminal is responsible for more than one line, only the one which
it's watching at the moment will be in upper case.  If another number is shown,
following the idle time, it is the number of additional Data Disc channels used
by the job.

If more than one physical terminal is tied to the same Data Disc line, FINGER
will show all of them; the normal output for the job controlled by that line
will be followed by one or more lines containing only the terminal information
(no job name, number, etc.); if the line is hidden, and someone has tied to it
by overriding the hiding, then the line typed for physical terminals other than
the responsible one will say *** SPY *** SPY *** SPY ***.

FINGER with no arguments displays all jobs which are logged in.  If any
programmer specified in the argument to FINGER is not logged in, the program
types the date and time of his last logout.  Also, if he has created a plan file
(with the PLAN command, Appendix 4), it is typed.  Typing -LOGOUT or -PLAN
(abbreviated -L or -P) will eliminate the logout time or the plan file.  FINGER
will accept human being names as arguments instead of programmer names, if
desired.

If more than one name is given as argument (separated by spaces or commas),
FINGER will report on all the selected users.  An argument of the form &file
will look for names in the specified file, with default extension null or .DIS
and PPN your own or [P,DOC]; FINGER &VB will look for VB[your alias],
VB.DIS[your alias], and VB.DIS[P,DOC] in that order.

If the argument to FINGER is of the form user@host or user%host, then FINGER
will show similar information about the specified user (or all logged-in users
if none is given) at the specified network host.  Not all hosts support this
FINGER protocol.  The form @* will show the FINGER display for all cooperating
hosts.

The HELP command provides information about system programs and facilities.  It
takes as its argument the name of some program or concept, and provides some
short description of that facility, if such a description exists.  The data for
HELP comes from the [3,2] directory; this data consists mostly of short text
files which are typed by HELP, but may also include programs or monitor commands
which HELP will run for you.  If no HELP is available, but there is a longer
document available in one of the standard documentation file directories, HELP
will so inform you.  If you type HELP with no argument, the program will list
the topics on which HELP is available.  (Some of the HELPers which run programs
rather than just typing text at you require that you be logged in.  HELP LOGIN
is cleverly not among those.)

The DSKSIZ command reports how much disk space someone is using and what his
disk allocation is.  The command takes a programmer name as argument; no
argument means your login programmer name.  The programmer name may optionally
be preceded by a device name, such as UDP1, to see the user's total usage on
that device.  The program types the user's allocation and the total amount of
space taken up in each of his directories, plus the size of files of his on the
area [2,2] (e.g., message, plan, and NS notification files).  Finally, it tells
whether the user is under or over allocation and by how much.

The switch /F (Fast) will suppress most of the typeout but give you the relevant
totals.  The /V switch (Verbose mode) will start by asking if you would like to
record the information provided in a disk file PURGE.DAT for later reference,
and if the user is over quota, offers to write in a file named PURDAT a list of
the files the purger would choose to purge.  The switch /A (All) will force
DSKSIZ to list all of the user's files in the file PURDAT, in the order in which
they would be purged right now, with an indication of which files are currently
safe from the purger.

Each line of DSKSIZ typeout is in the following format:

[PRJ,PRG]  n Files.  b Blk.  w DW.  p%  Date

This means that directory PRJ,PRG has n files occupying b disk blocks and w disk
words (each block is 2334. words) with a storage efficiency of p%.  Date is the
date of the most recently written file in the area.

The SYSTAT command runs the WHO program (see Section 5.9).  The old SYSTAT
program is no longer supported on this system, but the command name was retained
for compatibility with other systems.
                      5.12  Miscellaneous System Programs


The commands in this section run miscellaneous system programs.  Except as noted
below, they require that you be logged in.

The LISP command runs the MACLSP interpreter.  It takes no arguments.

Several commands run programs that communicate with other hosts through a
network.  These commands, which are discussed in detail in Appendix 6, include:

  TELNET or TN Opens normal Telnet connection to foreign host.
  SUPDUP or SD Opens display Telnet connection to ITS or WAITS host.
  DTN          Opens normal Telnet connection with Datamedia simulator program.
  OTN          Opens "old" protocol Telnet connection.
  FTP          Opens File Transfer Protocol connection to foreign host.
  HOST         Reports host names or numbers and related information.

It is possible to establish Telnet-like connections to remote computers by using
dial-up connections via the dataphones normally used for incoming dial-up lines.
The dataphone on TTY37 includes an automatic dialing circuit.  The DIAL command
will establish an outgoing dataphone connection and thereafter behave like a
Telnet.  In particular, this means that you can give to DIAL virtually the same
commands that you can give to Telnet; these commands are explained on page 160.

The DIAL command itself takes as its argument either the name of the phone
number you want or the telephone number itself, in the form

(ddd)ddd-dddd

where d represents a digit, the parentheses and hyphen are optional, and the
area code can be omitted if it is 415.  Certain commonly used phone numbers have
names that DIAL will recognize in place of the phone number, such as LOTS and
CCRMA; if you want to call some well known place, try DIALing its most common
name(s).  To specify the speed (baud rate) of the phone connection, you can add
one of the switches /110, /150, or /300 (abbreviated /1, /5, or /3), e.g.,
DIAL/1 CCRMA.  The default is 300 baud.  (You can also give a command of the
form DIAL TTYn, which lets you communicate with TTYn as if via Telnet.  This
form would be useful if TTYn had a phone that you could dial, but our terminal
phone lines generally can't be manually dialed out on, so this isn't very
useful.  The other use of this form occurs if the other end of the TTY has a
computer connected directly; this is occasionally done temporarily in order to
let WAITS talk to the given computer and vice versa.)

The NS command runs the News Service program, which allows access to news
stories which have been received from the Associated Press and New York Times
news wires.  The HOT command runs the HOT program, which types AP and NYT
stories as they come in.  These commands are restricted to local users at the
request of the Associated Press.  Full documentation on the news service is
contained in the file NS.ME[S,DOC].

The UFD command and the UDPUFD command run the UFD program, which is used to
create, delete, or modify user file directories on the system disk or on
file-structured user disk packs.  The difference between the two commands is
that UFD has default device DSK, whereas UDPUFD will use whichever UDP is
available to your job, if unique.  The command format is UFD DEV:PRJ,PRG.  To
create a new directory, you must know the pack (UDP) or master (DSK) password;
to change or delete a directory you must know its password.  However, you can
create a new directory on the system disk with the same programmer name you are
logged in under; this is the normal way for users to create additional
directories for themselves.  You can change the given directory's password or
file protection codes with UFD as you can (for the main file disk only) with
LOGIN (see Section 5.1).  You can delete a directory only if it is empty.

The UNPROTECT command allows any logged-in user to change the protection of any
file on the disk to 005, which allows any logged-in user access to the file.
The use of the command is logged on the console terminal and in the file
UNPROT.LOG[1,2], which is otherwise not writeable and cannot itself be
unprotected.  The command is intended as a last-resort emergency technique for
legitimate access to protected files, and its misuse is a serious offense.  User
file directories cannot be unprotected, and a protected directory will prevent
access to any of the files in it.  The argument to the command is the file to be
unprotected.

The ACCESS command is used to gain access to any protected disk directory for
which you know the password.  ACCESS takes its arguments exactly as the ALIAS
command does (e.g., ACCESS 1,SYS -- see ALIAS on page 53), but with ACCESS you
must give the directory's password and for that you get ownership rights to the
directory's files.

Unlike ALIAS, however, ACCESS runs a program in your core image.

ACCESS works by ALIAS'ing you and granting you a special privilege called the
AAO (Access Alias as Owner) privilege.  If you reference any file on your alias
PPN when you have AAO, you are given full ownership access to it.  If you change
your alias PPN with the ALIAS command or the DSKPPN UUO, you lose your AAO
privilege; otherwise, you keep it until you log out.

In addition, the ACCESS command with no argument gets you your normally entitled
privileges (after you have typed your password).  This is useful if you have a
remote-only password set up and have logged in locally without giving a
password; in that case, you won't have gotten any privileges that you are
entitled to (except for the Local User Privilege).

The UNDELETE command can be used to try to recover a file which has been deleted
accidentally.  The format is UNDELETE newfile←oldfile where oldfile is the one
which was deleted and newfile is the name under which the recovered version will
be written.  The file can be recovered only if the disk space it occupied has
not yet been reassigned to another file, so if you accidentally delete a file
you should try this right away.  A file which can't be recovered this way may be
recoverable from the backup tapes which are made daily, using the DART program
(Appendix 5).

The @ command runs the @ (ATSIGN) program, which can be used to produce
cross-reference program listings for XGP or Dover output.  It also allows for
incremental listings when a program is modified.  The documentation for @ is in
the file ATSIGN.RMS[UP,DOC].

The FRAID command runs the system program FRAID, which is a version of the RAID
debugger (documented online in the file RAID.PMP[S,DOC]) for looking at and/or
modifying binary disk files (instead of core images, which normal RAID handles).
To run FRAID, give the monitor command:

FRAID <filename><optional switches>

where the <optional switches> can include any of the following:
    /D     means the file is a DMP-format file (this is the default)
    /N     means the file is not a DMP file
    /R     means open the file only for Reading (this is the default)
    /W     means open the file for Writing
With the (default) /D switch, the extension .DMP is assumed.  With DMP files,
locations 0 through 73 cannot be viewed since they are not stored in the DMP
file.  If FRAID is run in /W (write-enabled) mode, all changes made in the core
version of the file are immediately written onto the disk.  If any error occurs
in parsing the command line or in opening the file, then FRAID reverts to asking
explicit questions about the modes and filename.  FRAID does not allow a device
to be specified for the file.  To FRAID a file on a UDP, you must assign the UDP
as DSK.

The PROVE command runs the PROVE program, a Pascal verifier.

The VERIFY command runs the VERIFY program, another Pascal verifier.

The FIXIMLAC command is used to initialize IMLAC terminals.  (These are
terminals which are treated as Datamedias by the monitor, but are actually small
computers with display screens.)  With any luck, you will never see an IMLAC.
This command may be given when not logged in (it should be given from the IMLAC
itself, to reload it).  READ IMLAC for details.

The DECIDE command can be used to help make difficult programming decisions.
For example:

DECIDE SHOULD I GO TO LOUIE'S FOR DINNER TONIGHT?

The TEST command runs the system program TEST, if any, which is used for testing
new system features and programs.
                             6  PRIVILEGED COMMANDS


Certain command functions can only be used by privileged users.  (There are
several privileges which may be associated with a PPN.)  Most privileged
functions are carried out by programs and are documented with those programs,
but a few monitor commands themselves take on special meanings when used in a
privileged way.  Most users do not require any privileges; if you think you need
to be assigned any, see a system programmer, who will disagree.

The DETACH command, if given with a device name argument by a user with the DEV
privilege, makes the specified device unavailable to users.  This is intended to
be used for hardware maintenance.  The ATTACH command with device name argument,
also privileged, assigns a detached device to the job giving the command; it
becomes generally available when the job deassigns it.  The DETACH command also
accept pseudo-device names of the form DDn or DDn! ; the former marks Data Disc
channel n as not a preferable channel, and the latter (with the !) makes that
channel completely unavailable (really detached).  ATTACH DDn undoes both kinds
of DD detaching.

The DEV privilege or being on the console terminal (CTY) also allows: (1) the
TTY command to be directed to any terminal, even if in use by another job;
(2) the TTY SPEED command for any scanner line, provided still that the line can
physically run at the given speed; and (3) the TTY ENABLE nnn command to enable
use of keyboard nnn when the system is otherwise down for maintenance.

A user with the ATT privilege can use the ATTACH command to attach a phantom job
(i.e., a detached job with the JLOG bit off in its job status word).  In this
case, ATTACH will log the job in by turning on its JLOG bit.

A few privileges are available to any user, but must be specifically enabled by
giving the ENABLE command with the privilege name as argument.  These privileges
are UPG, LIV, DET and LUP.  These privileges, and any other privileges a user
may have, can be disabled by the DISABLE command, also with the privilege name
as argument.  The command DISABLE ALL disables all your privileges except for
LIV and LUP.

The UPG privilege must be enabled before giving a FLUSH command for a terminal
which is in use.  (See page 51 for the use of this command.)  The FLUSH command
disables the privilege, so you must enable it every time you use it.

The LIV privilege prevents automatic logout, which normally happens when a job
has been idle for a certain length of time (varying with the time of day, see
page 5).  If you have a core image that you need to keep logged in while you
poke at it, then the LIV privilege will preserve it.  With the LIV privilege
enabled, an idle job on a Data Disc or dialup line that is needed because of a
shortage will merely be detached, thus freeing up the line but keeping the job
logged in.  The LIV privilege goes away when you run (or GET) a new program,
since LIV applies only to a given core image.

On the other hand, the DET privilege, which stays on until turned off
explicitly, can be used regularly to turn autologout into autodetach provided
there is no job shortage in the system.  With DET, a job that would otherwise be
killed in order to free up a DD channel or dialup line will normally just be
detached.  However, if there is a job shortage or if the job has been idle for
over two hours, then it will be killed even with DET enabled.  The login option
DETACH can be used to have DET enabled automatically when you log in (see
Section 5.1).

The LUP privilege means logged-in user; it is set for all users on login, and
distinguishes logged-in (and therefore authorized) users from guests who use the
commands allowed without login.  Various programs restrict the capabilities
available to not-logged-it users, who cannot write most files.  The privilege
can be disabled primarily for the benefit of people debugging system programs
which must distinguish logged-in from not-logged-in users.  Once disabled, LUP
can be re-enabled only if you are at a DD or III terminal or if you give the
ACCESS command without an argument (getting your privileges by giving your
password).

Also, a few system programs intended for general use require special privileges.
Such programs are run by special commands (not R or RUN), and any attempt to
modify your core image while running such a program will disable the temporary
privileges involved.

The EDDT command can be given only from the P1 console terminal.  It stops
timesharing and starts Executive DDT to allow debugging of the monitor.

The BEEP command also can only be given from the console terminal.  It beeps all
terminals on the system and is used to signal the restoration of service after a
system pause.

The P2LOAD command can be given only from the P1 console terminal.  It reloads
P2 (the secondary processor, which is currently a KA-10 used mainly to run the
XGP and the VRN).  Without any argument, this command reloads the normal P2
system, but the command can be followed by a semicolon (";") and a filename
and/or switches to take other special actions, such as marking P2 memory as up
or down.  For details, see a wizard.

The 11LOAD command can be given either from the P1 console or from a job with
the DEV privilege.  This command reloads the console PDP-11, which connects
SU-AI to the Ethernet as well as controlling the console terminal.  Again,
without any argument, this command reloads the normal program into the PDP-11,
but the command can be followed by a semicolon and a special 11LOAD subcommand
to make it do something out of the ordinary.  For details, see a wizard.

The TTY EXIST nnn command turns on the scanner port for the given TTY(s)
(numbers separated by commas) and resets their speeds to the defaults.
TTY NO EXIST nnn turns off the given TTYs' ports.  With no arguments, these
commands can be used to see a list of TTYs whose ports are on or off.  This
command is not actually privileged, although it is intended primarily for use by
wizards.

The BROADCAST command, given from the P1 console terminal or from a job with the
DEV privilege, causes the system to enable reception of Ethernet broadcast
packets.  This can cause the system to bog down substantially when lots of
broadcast packets are being sent.  To disable reception of this packets, the
NOBROADCAST command is given, again from the P1 console terminal or a privileged
job.

The CTYSET command, given from the P1 console terminal or from a job with the
DEV privilege, selects which terminal is to be used as the P1 console.  This
allows an alternate CTY to be selected and run through the DCA line scanner, in
case the normal CTY isn't working or is being used to debug the console PDP-11.
The CTYSET command should be given with an octal argument specifying the DCA
port to use for the alternate CTY; or, to re-select the normal CTY, the CTYSET
command should be ended with an altmode.

The DCAAVG command, which is not really privileged, types out the average number
of DCA interrupts generated on various time scales.  This information is
generally useful only to wizards.

The PITIME command, again not actually a privileged command, types out the
approximate percentage of time the computer spends in various states.  This
information is useful mainly to wizards.

The unprivileged DQAVG command types out various averages of the disk queue
size, which is the number of jobs waiting to use the disk.
                                   A1  SNAIL


SNAIL is a program which interprets certain monitor commands for editing files,
compiling and loading programs, and loading the line editor buffer.  It
simplifies these tasks when necessary by expanding concise user commands into
the different forms used by editors, language processors, and the loaders.
Without user intervention, SNAIL will run the correct language processors to
translate the user's files, and will run a loader to create an executable core
image containing the user's program.  SNAIL also provides a convenient means of
communication between editors and other processors.

SNAIL knows about certain standard processors.  These are the editors: SOS and
TECO; the compilers: SAIL, FAIL, F40 (FORTRAN), MACRO, PALX, BLISS, AL, MIDAS,
PASCAL, and FASM; the document compilers: PUB, POX and TEX; the debuggers: BAIL,
RAID, and DDT; and the loaders: LOADER and LINK.

The E editor includes within it the SNAIL functions, so its "SNAIL" commands run
E directly rather than via the SNAIL program.  Nevertheless, the E commands are
included here because they are operationally similar.

The SNAIL commands are divided into three classes: EDIT, COMPILE, and CREF.
                           A1.1  EDIT-Class Commands


There are six EDIT-class commands, two for each of the three commonly used
editors:

                                         Command Name
               Program            Create File    Edit File

               E                  CETV           ETV
               SOS                CREATE         EDIT
               TECO               MAKE           TECO

CREATE and MAKE

These commands take a file name as the argument.  SNAIL will call the editor and
tell it to initialize the file of that name.  For CREATE, SOS is started in line
insertion mode.  TECO (the MAKE command) will be initialized to write on the
specified file.

EDIT and TECO

These commands take a file name (with optional project-programmer name) as the
argument.  SNAIL remembers the name of the last file that was edited in a TMPCOR
file named ED.  (A TMPCOR file is a simulated file kept in core by the monitor
until the job is logged out.)  If an EDIT-class command is given without an
argument, SNAIL will use the argument that it remembered.

Normally, the user's SNAIL commands are forgotten when the job is logged out.
However, if both LOGIN:RPGSAV and LOGOUT:RPGSAV are included in the user's
OPTION.TXT file, then the TMPCOR files containing the commands will be stored on
disk between sessions.  See Section 5.2.

If no extension is specified in the argument and no file with the given name and
blank extension can be found, then the user's directory is searched for any file
with the given name and one of several standard extensions.  The standard
extensions are searched in the order:

  FAI S1 SAI FOR F4 LSP WEB PUB POX TEX MSS MAC MID VLI LAP PAL AL
  MF TFD MIC WRU NSA OSA PAS LST PPR CMD MSG TXT DO INI NS DIS

If none of these is found, the first file listed in the directory with the
correct name and any extension is edited.  However, the following extensions are
never selected for editing:

  REL DMP XGP FNT CFT TFX DRW WD PC WPC PLT PCP PLX LDI RIM FAS VRN
  PIC BIN WL WLS PRE PRS TFM VNT ANT CRU PRF

If a user specifies a disk area other than his own current (alias) area, then
the edited file will be put on his disk area and the source (from the other
area) will not be changed.

The editors have a read-only mode in which files may be examined by using editor
commands, but not changed.  To get read-only mode type /R after the file name in
the edit command (e.g., ETV M.SAI/R).  Read-only mode in SOS prohibits any
commands that would change the file.  In the E editor, the mode may be changed
from read-only to read-write at any time.

CETV, ETV, and EREAD

These are the create and edit commands for the E editor.  They do not run the
SNAIL program; instead, E itself simulates the SNAIL functions.  There are some
differences between these and the other editor commands:

1.  The command can include /nP and /nL switches for page and line numbers and
the /N switch for no-directory mode as well as /R for read-only.  E saves its
position in the file when it exits, so a later ETV command with no argument will
continue the edit from the same point in the file.  An E command may also
contain a list of remembered files, pages, and lines for ease of switching
around.  There are also other possible switches.  A complete explanation is in
the file E.ALS[UP,DOC].

2.  If you specify a PPN with the filename given, E will let you edit the file
on that disk area instead of copying the file to your current area as the other
editors do.

3.  The EREAD command is equivalent to the ETV command with the /R switch, i.e.,
it edits the file in read-only mode.

READ

The READ command starts E in read-only mode, like EREAD, but looks for the file
to be edited in the system documentation areas [*,DOC] and [3,2].  The argument
to READ should be the name of a system program or concept for which you would
like documentation.

BOOK

The BOOK command starts E in a special mode, called book mode, used to read long
files over an extended time period.  In this mode, E does several things
differently from the normal editing procedure:

1.  If there is a file with the name in the BOOK command, the extension BKP, and
a PPN matching either that given in the command, your ALIAS PPN, or your login
PPN (tried in that order), it is used as a SNAIL file to determine where to
start editing the specified file.  This "bookmark" file is not deleted by
LOGOUT, so you can continue reading at a later session.  The file, if found, is
updated when you exit from E; if there was no BKP file, one is created on your
(alias) area when you exit.  However, if you exit from E while on the last page
of the file, the BKP file will be deleted (E assumes you have finished reading
the book in this case).

2.  A BOOK command with no argument uses TMPCOR files like the ETV command does,
but the TMPCOR filename used is different, so you can alternate ETV and BOOK
commands for different files with no confusion.

3.  E does not allow you to modify the file when using book mode.
                          A1.2  COMPILE-Class Commands


There are three types of COMPILE-class commands: COMPILE-type commands, which
abbreviate a series of commands to compilers (and other language processors) and
loaders; DOCUMENT-type commands, which process a document; and LOADBUF-type
commands, which load the line editor buffer with a sequence of commands much
like the DO processor (see Section 5.7).  Each COMPILE-class command, if given
with arguments, remembers both the command and the arguments in a TMPCOR file
named CM.  This is useful because all the editors allow an exit-and-go command
(in SOS, the G command; in E, the CONTROL-X GO command; in TECO, the EG
command).  The exit-and-go feature runs SNAIL in a special way which makes SNAIL
re-execute the command that it remembered.
                   A1.3  DOCUMENT-Type COMPILE-Class Commands


The DOCUMENT-type COMPILE-class commands are the easiest to describe.  These
commands, PUB, POX and TEX, run the same-named document processors.  Both
commands take a file name as an argument, with optional switches.  If an
extension is specified with the file name, that file is processed by the
appropriate document processor.  If, on the other hand, no extension is
specified with the file name, the user's directory is searched first for the
file with the given name and extension .PUB, .POX or .TEX, depending on the
command, then for the file with the given name and no extension.  Whichever of
those files is found first is the one which will be processed by the document
processor.

Switches to the document processor may be specified in parentheses immediately
following the file name.

Examples of use:

        POX FOO.POX
        PUB FOO.PUB(LH)
        TEX XXX

The last of these will run TEX on the file XXX.TEX if it exists, otherwise it
will run TEX on XXX.
                   A1.4  LOADBUF-Type COMPILE-Class Commands


The second type of COMPILE-class commands are the LOADBUF-type commands.  There
are three such commands: RER, RERUN, and PROCESS.  These commands take as
argument some text to be loaded into your line editor in order to be typed to
the monitor.  SNAIL remembers the argument text last given to one of these
commands so that you can repeat the SNAIL command later without having to
re-type the argument text.  These commands incorporate some of the features of
the DO processor, allowing the user to take advantage of the exit-and-go feature
of the editors for an arbitrary sequence of commands without paying the penalty
of running an extra processor.

The RER and RERUN commands are similar in form.  Both are followed by a
processor name, an optional core size for the processor, a double-arrow, and a
string (called the object string) terminated by a line feed.  SNAIL swaps
control to the designated processor after loading the object string into the
line editor buffer.  The only difference is that the processor in the RER
command is retrieved from the SYS: disk area, while the processor in the RERUN
command is retrieved from the user's own disk area, or one that he specifies
explicitly.  This distinction is the same one made between the R and RUN monitor
commands.

The PROCESS command is followed by a double-arrow and an object string,
terminated by a line feed.  After loading the object string into the line editor
buffer, SNAIL exits.

The command PROCESS @ will load into the line editor buffer the text of the CM
TMPCOR file, i.e., the remembered COMPILE-class command of any type.

SNAIL preprocesses the object string for all three commands by replacing
occurrences of the character double-arrow ("↔") by a carriage return-line feed.
The DO processor also does this.  However, the other character-replacement
features of DO are not currently implemented.

If any of these commands is given with no argument, then the command is executed
with the text that was last used as argument to such a command.

If a PROCESS command is given with no argument, the command TMPCOR file must
contain a PROCESS command.  If a RER or RERUN command is given with no argument,
the command TMPCOR file must contain a RER or RERUN command.  Otherwise an error
message will be printed and the line editor buffer will not be loaded.

The RER and RERUN commands are compatible in the following way.  If you give
either of these commands with no argument after most recently giving the other
command, then the current command will be executed with the previous text.  This
allows the user to alternate between running a system program and a private
(same-named) version, with the same text being given to both programs.

Examples of use:

        RER IL↔(DSKIN FOO)↔
        PROCESS↔R IL↔(DSKIN FOO)↔
        RERUN IL[UCI,SYS]↔(DSKIN FOO)↔

The first two examples will do the same thing.  The third example could be used
to allow alternating use of RER and RERUN to compare the current version of
ILISP with a new version.
                   A1.5  COMPILE-Type COMPILE-Class Commands


The last type of COMPILE-class command to be described is the COMPILE-type
command.  There are six COMPILE-type commands: COMPILE, LOAD, PREPARE, DEBUG,
EXECUTE, and TRY.  Following the command, the user lists files which are to be
compiled or loaded.

All COMPILE-class commands normally cause compilation of the specified source
files.  All but the COMPILE command may cause execution of a loader (LOADER or
LINK) to create a core image, possibly including a debugger.  The table below
summarizes the actions of the COMPILE-type commands.

            REL file   Core Image   Debugger   Execution

  COMPILE     yes
  LOAD        yes         yes
  PREPARE     yes         yes          yes
  EXECUTE     yes         yes                  starts the user program
  TRY         yes         yes          yes     starts the user program
  DEBUG       yes         yes          yes     starts the debugger

The COMPILE command takes as arguments one or more file descriptors, separated
by commas.  SNAIL will cause the appropriate translator to be used for each of
the files.  The COMPILE command does not produce a core image; to get an
executable core image one of the other COMPILE-type commands must be used.

LOAD does a COMPILE if necessary and then starts a loader (LOADER or LINK).  The
loader takes the .REL files that were generated by the compilers and combines
them into an executable core image.  When the loader is done, it exits to the
monitor.  This command makes a core image but does not start it.

PREPARE is like LOAD, but a debugger (BAIL for SAIL programs, RAID for other
programs when the user is at a display, and otherwise DDT) is loaded with the
user's program.

EXECUTE is like LOAD, but instead of exiting, the loader starts the program it
loaded at its specified starting address.

The TRY command is like EXECUTE, but it loads a debugger (BAIL, RAID, or DDT, as
in the PREPARE command) with the user program.  Execution starts at the
program's starting address.

DEBUG is like TRY except that rather than starting the user's program it starts
the debugger (RAID or DDT--if the debugger is BAIL this command is treated
exactly the same as TRY).  The user may give commands to the debugger to start
his program, to plant breakpoints, etc.

SNAIL writes TMPCOR files for each processor involved in compiling or loading
the files specified in the user's command string.  SNAIL also attempts to
minimize unnecessary compilations by checking the creation dates for the files
the user wants compiled; for example, if the command was

        EXECUTE X1.SAI,X2.SAI

and the file X1.REL has a later creation date than the file X1.SAI, SNAIL
assumes that X1.SAI has not been changed since it was last compiled, and omits
X1.SAI when it tells SAIL which files to compile.  If the REL file and the
source file have the same time written, then the file is compiled again for
safety, in case the source has been changed.

The user can override SNAIL's date-checking by specifying certain switches.  A
SNAIL switch is selected by including a slash ("/") followed by the appropriate
switch name.  Switches which affect the date-checking actions of SNAIL are the
following.  A switch of the form /-XYZ turns off a previously set /XYZ.

  /COMPILE    Force recompilation without checking the dates of .REL files.
  /REL        Force loading from the .REL file if it exists.
  /NOLOAD     Don't issue a loading request for this file.
  /LONLY      (Implies /COMPILE, /NOLOAD, and /NODMP.)  A listing should be
              made for this file, but no load request for it should be issued.
  /CONLY      (Implies /COMPILE, /NOLOAD, and /NODMP.)  A cross-reference
              listing should be made for this file, but no load request for it
              should be issued.
  /LIBRARY    (Implies /REL.)  Force the loader to search this file as a
              library.
  /NODMP      Don't include the .DMP file in date-checking or deciding which
              file to give control to first.  This switch has no inverse.

SNAIL remembers the last COMPILE-type command with arguments it was given, just
as it does for DOCUMENT-type commands and LOADBUF-type commands, in a TMPCOR
file named CM.  This "remembering" may be turned off for COMPILE-type commands
by using the /NOCMFI switch; if this switch appears in a command, the CM file
will not be written for that command.  This switch is useful when using either a
LOADBUF-type command or the DO processor, and including within the command
string another SNAIL COMPILE-class command; if /NOCMFI were not specified, the
second command would be saved in the CM file instead of the first.

The simplest way to translate several programs is to create them with file
extensions which define the processor to be used; then give a single COMPILE
command with all these names separated by commas.  Extensions which SNAIL knows
about are the following:

  .FAI     signals a FAIL program
  .SAI     signals a SAIL program
  .MAC     signals a MACRO program
  .F4      signals a FORTRAN program
  .PAL     signals a PALX program
  .BLI     signals a BLISS program
  .AL      signals an AL program
  .MID     signals a MIDAS program
  .PAS     signals a PASCAL program
  .S1      signals a FASM program

SNAIL does not require file extensions to be typed explicitly.  For the command
COMPILE FOO, SNAIL will look for any file named FOO and check its extension.  If
a file FOO is found that does have one of the standard extensions, SNAIL will
select the corresponding translator.  If a file does not have a standard
extension, SNAIL can be told which translator to use by giving that information
in the command string.  (If a file has a standard extension, SNAIL cannot be
convinced to use some other translator.)  The following switches tell SNAIL
which translator to select (/-PROC undoes the effect of a previously seen
/PROC):

  /FAIL    Process this file with the FAIL assembler.
  /SAIL    Process this file with the SAIL compiler.
  /MACRO   Process this file with the MACRO assembler.
  /F4      Process this file with the FORTRAN compiler.
  /PALX    Process this file with the PALX assembler.
  /BLISS   Process this file with the BLISS compiler.
  /AL      Process this file with the AL compiler.
  /MIDAS   Process this file with the MIDAS assembler.
  /PASCAL  Process this file with the PASCAL compiler.
  /S1      Process this file with the FASM assembler.
                               More on File Names


A project-programmer name (PPN) may be included with each file name in the
command for COMPILE-type commands, just like for other SNAIL commands.  The PPN
specifies the disk area from which the file is to be read.  The PPN, enclosed in
square brackets ([ and ]), usually follows a file name; in this case the PPN
applies only to the preceding term.  If a PPN appears before a file name, then
that PPN is sticky (i.e., it applies to all the terms that follow) for the rest
of the command until another sticky PPN is seen.

A name followed by a colon (:) is a device name (which is sticky).  Some devices
are non-directory devices (for instance, TTY: and MTA:); a file name need not
follow specification of such a device.  For example, the command

        COMPILE TTY:/SAIL

compiles, using the SAIL compiler, input from the user's terminal.
                                More on Switches


Switches are allowed in COMPILE-class commands by including a slash (/) and the
switch name, e.g., /LIST.  Switches allow the user to select options.  In
general, a switch placed before a file name is sticky.  Switches placed after a
file name are not sticky; they apply only to the preceding term.  Specifying a
minus ("-") before a switch turns off that switch.  For example, the command

        COMPILE/FAIL A,B,C/-FAIL

will compile the files A and B using the FAIL assembler, and will compile C
using some other translator depending on extensions of files with file name C.
                         Concatenation of Source Files


It is often desirable to break up a program into two (or more) separate files
which have only one END statement at the end of the last file.  One reason for
breaking up a program is because it is very long, and it would be inconvenient
to keep and edit such a large file.  Another reason for separating a program is
to allow a portion of the program text to be shared.  Several files can be
processed together as one big translation by separating their names with plus
signs (+) rather than with commas.  For example,

        COMPILE DATA+PROGRM

treats the files DATA and PROGRM as if they were one large file and produces one
relocatable binary file, PROGRM.REL.  SNAIL will not allow concatenation of
source files that specify inconsistent processors.

Normally, the REL file will have the name of the last file in the command
string; it can be given some other name by putting the desired name and an
equals sign (=) at the front of the argument list, e.g.,

        COMPILE FOO=SYMS+PROGRM+IOPACK

would do one translation as if SYMS, PROGRM, and IOPACK were one large file and
produce relocatable binary output on the file FOO.REL.

Occasionally, a header file must be assembled with several other files, e.g.,

        COMPILE ACUMS+SINE,ACUMS+COSINE,ACUMS+TANGNT

The brokets (< and >) feature allows this to be done more simply:

        COMPILE ACUMS+<SINE,COSINE,TANGNT>

Brokets may not be nested.  Also, a plus sign may not follow a right broket;
e.g., the following command is illegal:

        COMPILE <A,B,C>+ENDS 
                          Producing Symbolic Listings


Assembly listings have the original code as it appears in the file plus the
octal values that the code represents with the relative locations that the octal
values go in.  Assembly listings can be generated by means of a /LIST, /LONLY,
/CREF, or /CONLY switch in the command.

The /LIST and /LONLY switches will produce a file with the same name as the REL
file and extension LST.  Such a file may be spooled or typed.  The two switches
differ in that the /LONLY switch implies /COMPILE, /NOLOAD, and /NODUMP; i.e.,
it means that the only thing to do with the file is make a listing for it, and
no REL file will be generated by the compiler for the source file.  Note that
COMPILE FOO/LIST will not compile anything if a current FOO.REL exists (this is
another instance where the /COMPILE switch is useful).  The /LIST may be used as
a sticky switch or it may be applied to particular terms.  The inverse switches
are /-LIST and /-LONLY.  (Processors other than the assemblers may also produce
listings.)

If either the /CREF switch or the /CONLY switch appears, instead of /LIST, it
generates an expanded listing that includes a list of all the symbols
(identifiers) used in the program and the line numbers on which each symbol
appears.  This is called a cross-reference listing.  These listing files cannot
be printed directly.  Instead, they must be processed by the cross-reference
lister program, CREF.  This is done by the CREF command (see page 104).  The
/CONLY switch differs from the /CREF switch in that the source file will always
be compiled, and no binary file will be generated by the compiler for the source
file.  The distinction between the /CREF and /CONLY switches is the same as that
for the /LIST and /LONLY switches described above.  Note: not all the processors
can produce a cross-reference listing.  Consult the appropriate manual to find
out if a given processor is capable of generating one.
                      Generating Core Images and DMP Files


The commands EXECUTE, DEBUG, LOAD, PREPARE, and TRY each generate an executable
core image.  Core images are made by translating source files (as in the COMPILE
command) and then running a loader (either LINK or LOADER), which takes the REL
files and produces a core image from them.  For the DEBUG, PREPARE, and TRY
commands, the loader is instructed additionally to load the program symbol table
and a debugger, namely, BAIL (for SAIL programs), RAID (if on a display), or DDT
(on a non-display).

Several SNAIL switches are relevant to the selection of a loader, and to the
actions of the loader once it starts loading.  These switches are listed below.
They can be negated with /-SWITCH.

  /LINK    The LINK loader will be used to create the user's core image.  LINK
           is sometimes able to load a program that LOADER cannot (LOADER may
           get a monitor error during loading).
  /LOADER  The LOADER loader will be used to create the user's core image.
  /BAIL    If the command specified a debugger (i.e., if the command was
           DEBUG, TRY, or PREPARE), BAIL will be loaded.
  /RAID    If the command specified a debugger, RAID will be loaded.
  /DDT     If the command specified a debugger, DDT will be loaded.
  /MAP     The absolute values of all the global symbols will be listed in a
           legible way on a file named MAP.MAP; this may not work for LOADER.
  /SAISEG  The Sail segment will be loaded instead of the Sail library being
           searched.
  /SAVE    A disk dump will be made of the core image.  The dump file will
           have the same name as the first REL file and extension .DMP; it can
           be given some other name by putting the desired name and a left
           arrow (←) in the command string.  /SAVE is unnecessary if the
           left-arrow construct is used.

The command

        TRY DUMP←SINE,COSINE/SAVE

translates the programs SINE and COSINE, producing SINE.REL and COSINE.REL.  The
LOADER is run.  Because the TRY command requests a debugger, either BAIL.REL,
RAID.REL, or DDT.REL is loaded from the system area.  SINE.REL and COSINE.REL
are loaded next.  Then the LOADER makes a dump copy of the core image in the
file DUMP.DMP and starts the program.

If there already exists a DMP file of the right name and if it has a creation
date more recent than those of the source files, no loading will be done.
Instead, the dump copy itself will be called in.  Reloading may be forced by the
/NODMP or /NODUMP switch in the command line.  Both an equals sign and a left
arrow may be included in a command string.  For example:

   COMMAND                       REL       DMP

  TRY SINE+COS/SAVE            COS.REL   COS.DMP
  TRY DUMP←SINE+COS/SAVE       COS.REL   DUMP.DMP
  TRY DUMP=SINE+COS/SAVE       DUMP.REL  DUMP.DMP
  TRY FOO←DUMP=SINE+COS/SAVE   DUMP.REL  FOO.DMP
                                Library Searches


Several REL files may be combined into a library.  A library is a special REL
file from which routines may be independently selected.  Library files are made
by combining REL files together using the FUDGE2 program (which is described in
DEC documentation).  For example, sine, cosine, and tangent routines might be
combined into a trig library, TRIG.REL.  Then, if a particular program used just
the sine routine, instead of loading the entire trig package it would be able to
select only the sine routine.  The loader will search library files and load
only the programs that are needed.  The /LIBRARY switch after the name of a
library file tells SNAIL to request this loader feature.  The /LIBRARY switch
may also be used as a sticky switch; its inverse is /-LIBRARY.  Suppose there is
a program called NLT which uses the sine routine that was included in TRIG.REL.
Then the command LOAD NLT,TRIG/LIBRARY will cause NLT to be loaded and TRIG to
be searched.  The LOADER notices that NLT requires SINE.REL and searches
TRIG.REL for it.  Suppose another program, XLT, requires routines from two
library files, TRIG.REL and IOPACK.REL, and must be loaded with another program
LT.  Then any one of the following commands could do this:

        LOAD XLT,LT,/LIBRARY TRIG,IOPACK
        LOAD /LIBRARY XLT/-LIBRARY,LT/-LIBRARY,TRIG,IOPACK
        LOAD XLT,LT,TRIG/LIBRARY,IOPACK/LIBRARY

Programs which use library files must be placed before the library file names in
the command.  This is because the loader cannot know what routines to extract
from each library until it has loaded the programs that require library
routines.  Programs are loaded (or searched) in the order given in the command.
                          Alternate Processor Features


Processors other than SAIL, FAIL, FORTRAN, PALX, MACRO, BLISS, AL, MIDAS, PASCAL
and FASM may be specified by using the alternate processor feature.  The switch
/PROCESSOR DEV:NAME specifies an alternate processor.  In this switch, DEV
(assumed to be DSK, if absent) is the device name on which to find NAME.DMP, the
core image file of the alternate processor.  Once the /PROCESSOR switch is used,
SNAIL will recognize the extension NAM (i.e., the first three letters of the
processor name) and the switch /NAME (the processor name) in the command line.
A project-programmer name or device name may be used in specifying the alternate
processor.

For example, for a user to translate the program SINE using a processor named
PROC on his disk area, he could use the command:

        COMPILE SINE/PROCESSOR PROC

When a standard processor is used, it is known that it will take a text source
file and produce a binary REL file, and possibly a text LST file.  With
alternate processors there is no such guarantee.  An alternate processor may
process a text file into a new text file which becomes input to a standard
processor.  It is possible to specify all these functions in a single
COMPILE-type command.

If an alternate processor generates a text file instead of a REL file, loading
must be inhibited.  The /NOLOAD switch accomplishes this.  The /NOLOAD switch
must be used for each term that does not produce a REL file (except in the
COMPILE command, which does no loading anyway).  The inverse switch is /-NOLOAD.

Suppose the preprocessor, PRE, translates the file BAZ into a file FOO which is
a FAIL program.  FOO must be translated when PRE is done.  Also, MAIN and SINE
must be translated and loaded with FOO.  The command:

        LOAD FOO=BAZ/PROCESSOR PRE/NOLOAD,MAIN,SINE,FOO/FORWARD

will do all of this.  The /FORWARD switch is necessary because the file FOO does
not exist at the time the command is given.  Including the /FORWARD switch
prevents SNAIL from looking for FOO; SNAIL will assume that FOO magically
appears before FAIL is called.  The inverse switch is /-FORWARD.

The processor DO (see Section 5.7) is another example of an alternate processor.
The DO program writes the CM TMPCOR file to force the exit-and-go command from
the editors to run DO again.
                              Translator Switches


Switch names enclosed in parentheses "(" and ")" are passed directly to the
translator.  The documentation for each of the translators explains what
switches are available.  The switches passed in this way appear on the source
file specification.  Sometimes it is necessary to put switches on the binary or
listing term.  For this purpose, there are two other switch constructions.

The construction (#1,#2), where #1 and #2 are any switch strings, passes #1 to
the binary term and #2 to the source term.  The construction (#1,#2,#3) passes
#1 to the binary term, #2 to the listing term, and #3 to the source term.  For
example,

        COMPILE/LIST FOO(AX,BY,CZ)

will pass the switch string "AX" to the binary term, "BY" to the listing term,
and "CZ" to the source term.
                                Loader Switches


Switches to the loader may be specified in a COMPILE-class command.  Switches to
LOADER appear as a percent sign (%) followed by a letter (or a number and a
letter) in the command string of one of the LOAD, TRY, EXECUTE, PREPARE, or
DEBUG commands; switches to LINK appear as a percent sign followed by some
character not appearing in the switch string, followed by the switch string,
followed by the character that appeared after the percent sign.  In either case,
the switch string is directly specified to the appropriate loader.  Examples:

        EXECUTE FOO1,FOO2,FOO3%M
        TRY BIGPRG.SAI%100K
        TRY/LINK BIGPRG.SAI%"RUNCOR:100"

LOADER and LINK switches are listed at the end of this appendix.  For a full
description of what the other switches above mean, consult the DEC documentation
for LOADER and LINK.  The LOADER has been modified for WAITS, so the DEC
documentation does not accurately reflect the state of the software.  Consult a
wizard if necessary.
                                 Command Files


COMPILE-class commands are sometimes too long to fit on one line, or are too
complex to be typed correctly every time.  To solve this problem, arguments can
be read from a file.  The text contained in such a file is read by SNAIL as if
it had been typed as the arguments to a command.  The command file may contain
any features available in a COMPILE-class command.  Any text between a semicolon
and the next line-feed is ignored; carriage-returns and line-feeds are also
ignored, and hence may not be used to separate file names or other identifiers.

To use a term as a command file write an at sign (@) before the command file
name, e.g., LOAD @SYS.  Upon scanning the at-sign followed by a file name, SNAIL
looks for a command file with that name; if no extension was specified, SNAIL
checks first for the file with extension .CMD, then for the file with no
extension and the specified name.  The command file SYS might look like the
following file which is used to assemble the entire operating system:

     %S%B%? WAITS=HEAD(XLR)+OUTER+NETDEF+JOBDAT+CACDAT+UNCDAT+P2COMM;
     +LOWCOR+PARSER+SYSINI+MPXSER+KLSER+COMCSS+CLKSER+PAGSER;
     +UUOCON+SPWSER+SCHEDU+SWPSER+CORE;
     +DPYSER+TTYSER+VDPSER+LINED+DLNSER;
     +DSKSER+DTCSER+MTCSER+TVSER+LPTSER+ELFSER+CARSER;
     +XGPSER+PTPSER+PTRSER+IMPSER+PUPSER+NULSER;
     +TAIL+DDT+ONCE
                               A1.6  CREF Command


This command causes a cross-reference listing to be made.  All the files made
from COMPILE-class commands which used the /CREF switch are processed; for each
such file, a cross-reference listing is generated in a file with extension LST
and the name of the file being processed.  (LOGOUT makes SNAIL forget which
listing files to process.)  The CREF command activates SNAIL which in turn
activates the CREF program in a special way.  The CREF program when activated in
this way reads a file that SNAIL wrote which contains the names of the files to
process.
                      A1.7  SNAIL Switch Function Summary


  Switch     Abbrev Meaning

  /AL        /A     Use AL for this term.
  /BAIL      /BA    Use BAIL if a debugger is required.
  /BLISS     /BL    Use BLISS for this term.
  /COMPILE   /COM   Force re-compilation without checking the dates of REL
                    files.
  /CONLY     /CON   Force re-compilation and produce only an extended listing
                    to be input to the CREF processor.
  /CREF      /CR    Request a cross-reference listing.
  /DDT       /D     Use DDT if a debugger is required.
  /F4        /F4    Use F40 (FORTRAN) for this term.
  /FAIL      /FA    Use FAIL for this term.
  /FORTRAN   /FORT  Use F40 (FORTRAN) for this term.
  /FORWARD   /FORW  Prevent SNAIL from looking for this file to decide if the
                    REL file is up to date.
  /LIBRARY   /LIB   Force the loader to search this term as a library.
  /LINK      /LIN   Use the LINK loader to create the core image.
  /LIST      /LIS   Request a listing file.
  /LOADER    /LOA   Use the LOADER loader to create the core image.
  /LONLY     /LON   Force re-compilation and produce only a listing file.
  /MACRO     /MAC   Use MACRO to translate this term.
  /MAP       /MAP   Request a loader map of global symbols.
  /MIDAS     /MI    Use MIDAS for this term.
  /NOCMFI    /NOC   Don't generate a CM command file for this command.
  /NODMP     /NOD   Force re-loading without checking the dates of DMP files.
  /NOLOAD    /NOL   Prevent a loading request for this term.
  /NULREL    /NU    Send compiler output to the NUL device (discarding it).
  /PALX      /PAL   Use PALX to translate this term (produces .BIN file).
  /PASCAL    /PAS   Use PASCAL for this term.
  /PROCESSOR /PR    Specify an alternate processor.
  /RAID      /RA    Use RAID if a debugger is required.
  /REL       /RE    Force loading from the REL file if it exists.
  /S1        /S1    Use FASM to translate this term (produces .LDI file).
  /SAIL      /SAIL  Use SAIL to translate this term.
  /SAISEG    /SAIS  Load SAIL programs with the SAIL segment instead of the
                    SAIL library.
  /SAVE      /SAV   Force the LOADER to make a DMP file of the core image.
                   A1.8  LOADER Switches and LINK Equivalents


  LOADER LINK              Meaning
  Switch Equivalent

  %A     %"CONTENT:ZERO"   Causes a listing of all global symbols to be
                           printed.
  %B     %"SYMSEG:LOW"     BLT symbols down when done loading.
  %1B                      BLT symbols to upper segment.
  %C                       Chain beginning with Common.
  %D     %"TEST:DDT"       Load DDT.
  %E     %"EXECUTE"        Start up program when done loading.
  %F     %"SYSLIB"         Enter library search mode; search all default
                           libraries.
  %G     %"GO"             Finish loading, make final links, and exit.
  %H     %"DEBUG:RAID"     Load and start RAID.
  %I     %"NOSTART"        Ignore starting address of this program.
  %J     %"START"          Use starting address of this program.
  %nK    %"RUNCOR:n"       Adjust to n K of core (2n pages) when done loading.
  %L     %"SEARCH"         Search this file as a library.
  %M     %"MAP:END"        Print storage map.
  %N     %"NOSEARCH"       Leave library search mode.
  %nO    %"SET:.LOW.:n"    Set program origin to n, absolute.
  %P     %"NOSYSLIB"       Inhibit automatic library search for undefined
                           globals.
  %Q     %"SYSLIB"         Allow automatic library search.
  %R                       Chain beginning with resident module.
  %S     %"LOCALS"         Load symbol table also.
  %T     %"DEBUG:DDT"      Load and start DDT.
  %U     %"UNDEFINED"      Print current list of undefined globals.
  %V     %"TRY:RAID"       Load RAID.
  %W     %"NOLOCALS"       Load without symbols.
  %X     %"CONTENT:NOZERO" Do not list all globals.
  %Y                       Load SAILOW for 2 segment SAIL programs.
  %Z     %"RUN:LINK"       Restart LOADER.
  %<                       Disallow loading into upper segment.
  %1<                      Allow loading into upper segment and load there
                           next.
  %n<                      (n≥400000) Set upper segment relocation to n.
  %-<                      Allow loading into upper segment and load in lower
                           next.
  %?                       Sort symbols.
                              A1.9  Error Messages

                                 Obvious errors

No command file.
Incompatible commands.
        You gave a command with no arguments, and either no command had been
        saved or the two commands (the one you typed and the one which had been
        saved) aren't compatible.

Unrecognizable file name.
No such device.
Unrecognizable processor name.
        You mistyped a file or processor specifier.

Not a display.
        You're trying to load the line-editor buffer and you're not using a
        display.

Missing double-arrow or invalid core size.
Missing double-arrow.
        The LOADBUF-type commands must always be followed by a double-arrow.

Too many files.
        Currently the PUB, POX and TEX document compilers can only process one
        document at a time.

File not found.
        Either some file named in the command does not exist, or it doesn't
        exist with the correct extension.  You'll get this message if you try to
        use the /FAIL switch with FOO.SAI, for instance.

Unknown command.
Command error.
Illegal character.
        Something is wrong with what you typed, and SNAIL didn't find in the
        command what it expected to find.  For example, a file name didn't
        follow an at-sign.

Nested brokets illegal.
Unbalanced brokets.
Can't use "=" with brokets.
        You're not using brokets correctly.  Each of the files within the
        brokets will produce a different REL file, so the equal-sign construct
        can't be used.

Unknown switch.
Negation of this switch not allowed.
Invalid switch string.
Illegal LOADER switch.
Illegal LINK switch.



                                 Subtle errors

Empty command file.
Error in command file.
Tmpcor file too big.
        The CM command file which SNAIL is attempting to read is messed up
        somehow.

Storage overflow.
        Your command included too much of something (file names, device names,
        alternate processor specifications, translator or loader switches), or
        there are too many files in your directory that have to be date-checked.


                 Horrible errors (a wizard should be consulted)

SNAIL bug.
SNAIL allocation error.
        Typing CONTINUE followed by a carriage return when the latter happens
        might work.

Can't open channel.
        This is probably a bug in SNAIL.

Couldn't create file.
        A disk file could not be written correctly.  Possibly a file is write
        protected or in use by some other job.  Otherwise you may need help.

UFD missing.
        You are aliased to a non-existent disk area.  Otherwise, you need a
        wizard.
                                    A2  COPY


COPY is a utility program for file manipulation.  It can copy files, rename
then, delete them, and list their names (along with size and other information).
This appendix first describes the basic COPY command with all possible options,
and then lists the other monitor commands which run COPY and describes their
special functions.
                                  A2.1  Syntax


In this section the following rules are observed.  Anything in curly brackets
({...}) is optional.  Anything enclosed in brokets (<...>) has a syntactic
definition of its own and is described elsewhere.  Upper and lower case letters
are legal anywhere.  A break character is something which is not a letter, a
number, or a "*".  This will become important when you try to figure out some of
the error messages.  The term sticky means that the sticky item is applicable
until changed or until the end of the current command.

The basic syntax for all COPY commands is:

COPY {{<destination term>}{,<list term>}←}<source term>

The character "{ }="{ } may be substituted for "{ }←"{ }.

  <destination term>::=<switch term>
  <source term>::=     <switch term>{,<source term>}
  <switch term>::=     {<switch list>space}<term>{<switch list>}
  <list term>::=       <term>
  <term>::=            {dev:}{filnam{.ext}}{[prj,prg]}
                       | {<switch list>}{dev:}{[prj,prg]}{<switch list>}
                            @<spec term>
                       | \<filehack selector>
                       | ∂{ <prg> | * }{.ext}{[prj,prg]}
  <spec term>::=       {<spec switch list> }{dev:}{filnam{.ext}}
                            {[prj,prg]}{<spec switch list>}
  <switch list>::=     {/<switch>}{(<page list>)}{<switch list>}
  <spec switch list>::={/<switch>}{<spec switch list>}
  <page list>::=       <page term>{,<page list>}
  <page term>::=       N{:M}
                            A2.2  General Operation


COPY reads data from the logical file(s) indicated by the source term, performs
any operations requested by the switch term(s), and writes the data on the
logical file indicated by the destination term.  Any listing information goes to
the list term.

The device and ppn are sticky in the source; that is, if they are absent, the
last one specified is used.  The default device is DSK and the default ppn is
your current alias.

A single * may be substituted for any of the following: filnam, ext, prj, prg.
A * in the source term means "all."  A * in the destination term means "same as
in source file being transferred."

If filnam.ext is absent in the destination term, *.* is assumed.  If the
destination filnam.ext are specified (no *'s), all source files will be
concatenated into one big file with that name.

For example:

COPY DING←FOO,BAZ

would cause a file named DING to be created on your disk area comprised of the
files FOO and BAZ from your area.  If filnam.* or *.ext is used in the
destination term, the source files will be copied onto the destination one by
one with the new filename or extension.  <destination term>← may be left out and
DSK:*.*← will be assumed.  For source terms with directory devices you must
specify the filnam.ext.

If you try to write on top of a file which already exists, you will be given the
option of deleting it or not.  If any of the source files you have specified do
not exist, you will be informed and given the proper option.

If a string of source descriptors is specified, the string is executed from left
to right.

You cannot write a file in two different modes (e.g.  FIL1←TTY:,DSK:FIL2).
However FIL1←TTY:,DSK:FIL2/ASCII is quite acceptable (/ASCII causes the data
mode to be 0).  Data modes are explained in the UUO Manual.

The <spec term> construct causes the scanner to continue scanning in the file
specified by the term.  The term must indicate a unique file.  When end of file
occurs the scanner again reads from the terminal.  No spec terms may appear in
the file.  Switches preceding the "@" are treated as sticky switches.  Switches
following the "@" are treated as sticky switches only while reading from the
indirect file.  In a sense the indirect file is a "program block."  Upon leaving
the "block" all defaults are reset to those in force just before the "@".  A
device name and ppn may precede the "@", in which case the defaults are changed
to those, but no operation is done.  The device and ppn used in the spec term do
not affect the current defaults.

The \<filehack selector> construct for a term is a special shorthand feature to
allow commonly referenced files which would normally require a large amount of
typing to be entered quickly.  The following is a list of legal filehack
selectors and what they are short for (<prg> stands for the current programmer
name right justified).  Only enough letters to uniquely identify the name among
those in this list need be typed.

  Filehack File selected       What for?

  \MSG     <prg>.MSG[2,2]      Current user's mail file
  \MAIL    <prg>.MSG[2,2]      Current user's mail file
  \PLAN    <prg>.PLN[2,2]      Current user's plan file
  \PLN     <prg>.PLN[2,2]      Current user's plan file
  \NAP     <prg>.NAP[2,2]      Current user's NS notification file
  \NS      <prg>.NAP[2,2]      Current user's NS notification file
  \RPG     *.RPG[*,<prg>]      All of current user's RPG files
  \OPTION  OPTION.TXT[*,<prg>] All of current user's option files
  \BBOARD  BBOARD.TXT[2,2]     System bulletin-board file
  \DOWN    MAINT.TXT[2,2]      System downtime forecast
  \DIGEST  DIGEST[2,2]         Latest A.P. news digest
  \NEWS    NEWS[2,2]           Latest N.Y. Times news summary
  \NOTICE  NOTICE.TXT[2,2]     System message file
  \GRIPES  GRIPES.TXT[2,2]     System gripe file
  \GOLD    GRIPES.OLD[2,2]     System gripe archive file
  \DAY     DAY.TXT[2,2]        Daily birthday or holiday message
  \FORWARD FORWRD.TXT[MAI,SYS] Mail forwarding list
  \CSD     CSD.BBD[INF,CSD]    Bulletins of interest to CSD members

The filehacks which implicitly use the current programmer name to select a file
can also be given an explicit prg in the form \HACK:<prg>.

The ∂{<prg>|*} construct is another form of shorthand for referencing MAIL files
(see Appendix 4).  If no argument follows the ∂ then the current user's mail
file is indicated.  If <prg> is used, it means that user's mail file.  And
lastly, if * is used the file NOTICE.TXT[2,2] is selected (this is the public
mail file).  The default extension (.MSG) and PPN ([2,2]) implied by ∂ can be
explicitly overridden, e.g., ∂PRG.PLN will get user PRG's plan file.

There is a page counter in COPY which monitors ASCII output for form feeds.
When a form feed is encountered, the counter is incremented.  If a page list is
used in a term, N is taken as the starting page of this output and M (or N if M
is absent) as the ending page.  Output is only active when the counter is within
the range of the page list (e.g., TYPE COPY(21) would type out page 21 of the
file COPY).  When the end of the first term is exhausted, control is transferred
to the next term, and so on until the right parenthesis is reached, at which
point output ceases.  If more than one file is indicated, the page list is
re-scanned for each one.  Page lists are never sticky.  An asterisk (*) may be
used in a page list instead of the final page number, to denote the last page,
e.g., TYPE COPY(3:*) would type all but the first two pages of the file COPY.

Switches will be described in a section of their own.  See /LIST for an
explanation of "list term."

Logical device names may be used, but all switches apply to the physical device.
The following are legal physical devices for the copy command:

            DSK     UDPn    DTAn    MTAn    TTYn
                    XGP     PTR     PTP     TTY

When the special character ↓ (↑A on non-displays) appears, the scanner will read
the line character-by-character without interpretation until the next ↓ (or ↑A).
This is useful for allowing non-alphameric characters to be included in
filenames, e.g., editor or spooler temporary files.

For numeric input there is always a default radix (either decimal or octal).
Sometimes, however, it is desirable to force one or the other.  A number
preceded by a single quote is always interpreted in octal.  A number preceded by
a double quote is always interpreted in decimal.
                           A2.3  Device Peculiarities


Non-Directory Devices:

If the source device doesn't have a directory and the filename and/or extension
is specified by a *, then a generated filename and/or extension is used.  The
generated filename starts out as AAAAAA and the generated extension starts as
COP.  Either of these may be changed by specifying a filnam.ext in the source
term.  If a star (*) is used, the old name is retained; otherwise it is replaced
by the new one.  At the beginning of each term the filename is either changed to
that which was specified or incremented by one letter (i.e., AAAAAZ.COP is
followed by AAAABA.COP).  The following example may clear things up:

COPY DSK:*.*←MTA0:,,FOO.*,,*.BAZ

This would read 5 files from MTA0 and give them the following names:

  AAAAAA.COP
  AAAAAB.COP
  FOO.COP
  FOOA.COP
  FOOB.BAZ

Disk:

You may delete files belonging to other users (please exercise extreme care).
However, if you attempt to delete a file on a user file directory whose
programmer name is different from the one you used when logging in, you will be
asked if you are sure.  All normal file protection applies to deletions.

User Disk Pack:

COPY treats new format (file structured) UDPs like the main file disk.  The
file-structure simulation which COPY provided for old format UDPs is no longer
available.

DECtapes:

DECtapes are assumed to be in PDP-6 format (which is the current format our
system uses).  See the UUO Manual for an explanation of DECtape formats.  If the
directory becomes full (more than 30 files), you will be told which was the
first file not transferred.  If the DECtape becomes full, the file currently
being written may be incomplete.  An attempt is made to detect this condition
before the transfer is initiated, but this is not always possible.  The total
file capacity of a DECtape is about 71.4K words.  In order to write on a DECtape
the OFF-WRITELOCK-WRITE switch must be in the WRITE position.  If not, you will
be told to set it.

Magnetic tapes:

Mag tapes may be made to look like directory devices by use of the /SAVE switch
which is described later.  All mag tape switches are separate for input and
output (see rules about switches in switch section).  This means that mag tape
switches in the destination term don't apply to the source terms.

Paper tape:

Paper tape I/O is done in binary non-checksummed mode unless otherwise specified
(see /ASCII).  You should turn off the paper tape reader when you are done.  A
paper tape with a jagged end may cause spurious data to be read.  It is best to
tear it evenly at a fold.

Terminals:

On display terminals, COPY displays the number of the page being read (if
reading in ASCII mode).

Spooling pseudo-devices:

COPY recognizes two pseudo-device names, TPL: and PGX:, to allow spooling of the
output of some copy function to the line printer or XGP, respectively.  These
device names may be used only in output terms, and may not be used with file
names.  COPY creates a file on the [SPL,SYS] directory containing the desired
output, and enters a spooling request for the appropriate device.  The file is
deleted after spooling.  For a standard COPY command, the effect is essentially
equivalent to the recommended SPOOL/RECOPY (see page 115); the main advantage of
this capability is for direct spooling of list terms, e.g.,

DIRECTORY TPL:←[*,SYS]

to spool a list of the [*,SYS] file directories.  (Note: It is claimed that
these pseudo-device names stand for The Pseudo Lpt and Pseudo Graphic
Xerox-machine respectively.)
                                 A2.4  Switches


The term sticky means "applies until the end of the line or until changed
temporarily or permanently by some means."  Most switches appearing in the
destination term are carried over as sticky switches in the source.  Those
switches which are separate for destination and source terms are indicated by a
star (*) preceding the switch name.  Switches appearing in the source term are
sticky only if they precede the term with which they appear.  Otherwise, they
apply only to the current term and must follow it.  Only the first six
characters of a switch are significant.  You are only required to use enough
characters to uniquely specify the switch.

The following switches are available:

  SWITCH         ABBREV MEANING

  ACCESS         AC   This causes any disk privileges you have to be enabled, so
                      that if you are a wizard you can help a poor user diddle
                      his files even if they are normally protected from you.
  ALL            AL   This switch includes all of the input file in the output
                      even if the file uses the offset feature on the disk to
                      "hide" some data at the beginning.  See the disk offset
                      feature in the UUO Manual.
  ASCII          A    This forces transfers to be in ASCII.  Beware! This switch
                      will cause SOS line numbers to become part of the text.
  ASK            ASK  This causes dev:filnam.ext[prj,prg] to be printed for each
                      file under consideration followed by a question mark.  If
                      you answer "Y" the operation will proceed, if you answer
                      "G" the operation will proceed but you will not be asked
                      the for the rest of the term, otherwise the file will be
                      skipped.
  BINARY         B    This causes the data mode to be 13 and forces word by word
                      transfer of data.
  BLOCKED        BL   This causes records to be ended on output whenever they
                      are ended on input.
  BONLY=n        BO   This switch implies /SEARCH but causes only those files
                      that are bigger than nK to be listed.  If the "=n" is
                      omitted, n=256(K) is assumed.
  CONVERT        C    This causes copy to treat the character following a line
                      feed and the first character of a file as a FORTRAN
                      control character.  Be careful, this happens on output.
  *DENSITY=n     DE   This sets the density in bpi to n where n equals 800, 556,
                      or 200.  This switch is ignored for devices other than mag
                      tapes.  The system default density is 556.
  *DSPOOL        DS   This switch, when used with destination or list terms,
                      causes the output file to be spooled with the /DELETE
                      switch.  Output device must be disk.  This switch is
                      illegal in source terms.
  DUMPED         DU   This causes each 36 bit word from the input device to be
                      converted to the ASCII representation of the octal number
                      it represents and to then be sent to the output device.
                      The following format is used.  A "word number" is sent to
                      the output device which indicates which word in the file
                      is the first word in this row.  Then 8 data words are
                      transferred.  Then a <cr><lf> is inserted.  If desired, a
                      "page list" may be used for /DUMP; however, the values are
                      those of word addresses in the file instead of pages.
                      However, if the /SEARCH switch appears before this switch
                      (or the DIRECTORY monitor command was typed), this switch
                      has a different meaning: it includes in the directory
                      listing the date on which the file was last included in a
                      system DART dump, and the number of the tape on which it
                      was dumped.  If the file has been permanently dumped twice
                      or more, the character ">" appears after the tape number.
  *EVEN          EV   This sets mag tape transfers to even parity.
  EXTRA=n        EX   Whenever a line feed is seen n extra line feeds are put
                      out; n must be an unsigned decimal integer.  If n=0 line
                      feeds are converted to a 177 followed by a 21; this
                      inhibits form ejection at page boundaries on the line
                      printer.
  EXTRA≡n        EX   (Note "≡" not "=".)  This switch, used with the XGP only,
                      sets the inter-line spacing to n raster units.
  FAST           F    All the names specified by the source term are listed (no
                      size or other info).  This switch is therefore much faster
                      than /SEARCH.
  FONT#n=file    FON  This switch is used when copying to the XGP to select a
                      font.  Font number n (default is 0) is taken from the
                      specified file.  The file specification can include any of
                      filename, extension, and PPN; the defaults are
                      GACS25.FNT[XGP,SYS].
  FOO            FOO  This switch is used to produce a file directory listing
                      meant to be read by a program rather than by a human
                      being.  The switch name derives from the fact that the
                      switch was created for the benefit of layout and drawing
                      programs used in the design of the late, lamented SUPER
                      FOONLY computer.
  FULL           FU   If /SEARCH is specified, this switch provides more
                      information than is usually given in the directory
                      listing; specifically, it implies /UFDPRO, /TIME,
                      /PROTECTION, /WRITER, /REFERENCED, and /DUMPED.  This
                      switch does not automatically imply /SEARCH.
  GTOTAL         G    At the beginning of the execution of a term the term is
                      printed.  At the end of the term, a line is typed of the
                      form

                                  TOTAL=  n Blk    m.m Blk  pp%

                      where n is the number of whole disk blocks used up by the
                      file(s), m.m is the data size of the file(s) in blocks and
                      tenths, and pp is the percent of the block space which is
                      actually used by data.  This switch implies /SEARCH.
  HEADER         H    This causes a header to be put at the top of each output
                      page.  The header looks like this:

                  DATE  TIME     FILNAM.EXT    PPN       PAGE N-M

                      The current date and time are used, N is the logical page
                      number (number of form feeds seen plus one), and M is the
                      physical page of that logical page.
  IGNI           IGNI This causes input errors to be ignored (no message).
  IGNO           IGNO This causes output errors to be ignored.
  KILL           K    The input file is deleted after the transfer is finished,
                      even if the output filename is the same as the input
                      filename.  If the 200 bit in the file's protection code is
                      on, COPY asks before deleting the file.
  LIST           L    This causes the names of the files transferred during that
                      term to be listed.  If the input device is the disk the
                      ppn is also listed.  Non-directory devices will obviously
                      list nothing.  The output will go to the "list term".  If
                      the list term is absent, the output will go to your
                      terminal.
  *MLENGTH=nnnn  M    This allows the user to specify nonstandard length records
                      for mag tape I/O, where nnnn is a 1 to 4 digit number
                      interpreted in octal which specifies the number of data
                      words per record.
  NONUMBERS      N    This deletes line numbers from files that have them.  This
                      forces an ASCII mode transfer; in fact, /NONUMBERS can be
                      used on any ASCII transfer.  Do not use this switch on
                      anything but text files or you will be sorry.
  NOFF           NOF  This suppresses output of formfeed characters.  It implies
                      /ASCII, and can be applied to single source files.
  NOSPACES       NOS  This switch eliminates spaces at the end of a line.
  ODD            OD   This sets mag tape transfers to odd parity.  This mode is
                      standard and is the default option.
  OFFSET         OF   This switch implies /SEARCH and causes the file offset (in
                      decimal) to be included in the directory listing.  The
                      offset, if any, is the number of "hidden" records at the
                      beginning of the file which will not normally be seen when
                      the file is read.  See the UUO Manual for more information
                      about offsets.
  OONLY          OO   This switch implies /SEARCH but causes only those files
                      with non-zero disk record offsets (see OFFSET above) to be
                      listed.
  OPTIMIZE       OP   This forces COPY to treat the file as one produced by SOS,
                      and to pack it by allowing lines to span a record break as
                      long as line numbers are not the last word of a record.
                      SOS will read an OPTIMIZEd file, but will not write a
                      record ending with a partial line.  A file which cannot be
                      read by SOS because of line numbers or page marks at the
                      ends of records will be "fixed" by this switch.
  PAUSE          PA   This switch is effective only for output to the terminal.
                      It causes output to pause before each element of a page
                      list if one is specified, e.g., for the command
                      TYPE FILE(2,3:7,14) before pages 2, 3, and 14, or before
                      every page if no page list is used.  It also pauses after
                      the last page, before typing EXIT.  You must type RETURN
                      for the output to continue.  The switch is intended for
                      typing documents on a hardcopy terminal.
  PROTECTION     PR   If this switch is preceded by /SEARCH (or used with the
                      DIRECTORY monitor command), it causes the protection of
                      the listed files to be included in the listing and implies
                      the /UFDPRO switch to print the UFD protection and the
                      UFD's default file protection.  Otherwise, it must be
                      given with a protection code and has a different meaning,
                      as in the following paragraph.
  PROTECTION=nnn PR   This causes the output file to have the protection nnn,
                      where n is a digit from 0 to 7.  All three n's must be
                      present.  This switch applies only to disk output.  If no
                      protection switch is specified, the protection of the
                      input file is used (for non-disk input 000 is used).  When
                      concatenating files, the protection applicable to the
                      first file transferred is used.
  QUIET          Q    This switch prevents you from getting the message "FILE
                      ALREADY EXISTS...."  If the output file already exists, it
                      is deleted without a sound.  Also, if this switch appears
                      with /SEARCH, then only the ppn and the size on that ppn
                      are printed.  This switch also prevents being asked for
                      confirmation when trying to delete a file with the 200 bit
                      on in its protection code.  Finally, this switch
                      suppresses the confirmation normally required to go on
                      after a named file is not found in a COPY, DELETE or
                      RENAME command; thus DELETE/Q FOO,BAR,BAZ can be used in
                      BATCH and DO files to make sure the three files do not
                      exist.
  REFERENCED     REF  This switch is like /SEARCH below, but includes in the
                      directory listing an extra column containing the date on
                      which each file was last read (referenced by LOOKUP).  It
                      also includes the percent of days referenced; this percent
                      is typed immediately after the reference date, as a two
                      digit number.  The percent of days referenced is based on
                      the count of days referenced that is now maintained by the
                      system for all disk files.  Since the days-referenced
                      count has been maintained only since 21 May 1979, the
                      percentage considers only the days since then.  For files
                      that have been written on the day when the command is
                      given, no reference percentage is printed.  A percentage
                      of 100 is printed as 99 to conserve one column.
  RENAME         REN  A rename is done on the input file with the output file
                      information.  /QUIET can be used when the output
                      filnam.ext already exists.
  *SAVE          SA   If the output device is a mag tape, four words of
                      directory information are written.  If the input device is
                      a mag tape, four words of directory information are read
                      and compared with the source name specified.  If they
                      don't match, that file is skipped and the next examined
                      until a match is found or the end of tape is reached.
  SEARCH         SE   This switch overrides all other switches.  It gives you
                      more information than /LIST and suppresses any transfers.
                      Added to the /LIST information, you get the size of the
                      file in blocks and the date and time it was last written.
                      The information given can be further extended by the
                      switches /FULL, /TIME, /PROTECTION, /WRITER, /REFERENCED,
                      /DUMPED, /WORDS and /OFFSET.  (The offset will always be
                      listed if nonzero for a particular file.)  If a list term
                      is specified, all of the possible information is listed.
                      The output goes to the same place as with /LIST, with the
                      following variation: If the "list term" is omitted, the
                      listing goes to your terminal.  If /QUIET is used with
                      this switch and no list term was specified, only the ppn
                      and the total size of each disk area are printed.
  *SPOOL         SP   This is the same as /DSPOOL except that the /DELETE switch
                      is not used in spooling the file.
  TIME           TIM  This switch implies /SEARCH, and causes the directory
                      listing to include the time as well as the date when the
                      file was last written.
  TITLE          TIT  This causes a "title page" to be put out in large block
                      letters followed by a form feed.  The title is of this
                      form:

                                  FILNAM.EXT
                                  PPN
                                  TIME
                                  DATE

                      The date and time are when the file was last written.  For
                      non-directory devices, <device name>: is printed in place
                      of filnam.ext and ppn.
  UFDPRO         UF   This switch implies /SEARCH but also causes the UFD
                      protection and the UFD's default file protection to be
                      printed for each PPN for which a header is listed.  These
                      two protection codes are output on the PPN's header line
                      in the following form:

                          [PRJ,PRG]       UFD PRO=405; DEF PRO=000

                      The /UFDPRO switch is implied by /FULL and by /PROTECTION
                      (in a DIRECTORY command or following /SEARCH).  To get
                      just these protections typed out (without listing any
                      files), use DIRECTORY [PRJ,PRG]/Q/F/UF.  Note that if the
                      PPN header is not printed, the UFD protection will not be
                      listed.
  UIGNORE        UI   Ignore UFDs that are read protected from the user, e.g.,
                      in commands like DIRECTORY *.LST[*,*].  Without this
                      switch, COPY will issue a "protection failure" warning for
                      each such UFD that can't be read, and possibly require
                      confirmation before continuing.
  WAIT           WA   This switch will automatically wait for a busy device
                      (e.g., XGP) without requiring confirmation by the user.
  WORDS          WO   This switch implies /SEARCH and adds to the information
                      typed out the size of each file in words, or in K for
                      files bigger than 1K (1024 words).
  WRITER         WR   This switch includes the PPN and job name of the last
                      writer in the directory listing for disk files.  It
                      implies /SEARCH.
                                Monitor Commands


The following is a list of the monitor commands which use COPY and how they
work.  The syntax is the same as for COPY.

  COMMAND  EFFECT

  DELETE   This deletes all the files specified by the source term, and
           types the space reclaimed as with the /GTOTAL switch.  If the
           200 bit is on in the file protection key, you will be asked if
           you really want to delete the file (/QUIET overrides this
           feature).  The destination term is interpreted as the list term.
           The list term is therefore illegal.
  DIRECTORYThis gives you all or part of the file information for the
           source term(s) (or *.* if no source term is used).  The
           destination term is treated the same as for DELETE.  For a more
           flexible way of viewing the list of files in a directory, see
           the DIRED program on page 12; DIRED allows sorting the directory
           listing in various ways, whereas COPY's DIRECTORY command
           presents the files in the order that they appear in the UFD.
  RENAME   This allows you to change the filename, extension, PPN, and
           protection of a file.  The format is newname←oldname.  Use
           /PROTECTION=nnn to change protection.
  TRANSFER This copies files from one place to another and deletes the
           source files.
  TYPE     This sets the default output device to your terminal.
  XGPLIST  This sets the default output device to the XGP.
                                 A2.5  Examples


COPY DTA4:←*.*

This would cause all the files on your disk area to be written on DTA4.

COPY ←DTA4:*.*

This would cause all the files on DTA4 to be written on your disk area.

COPY <filnam.ext>/NONUMBERS

This would delete line numbers (if any) from the file indicated.

COPY [2,RPH]←*.*[1,RPH]

This would cause all the files on 1,RPH to be copied onto 2,RPH no matter who
you are logged in under (subject to file protection failure).

TYPE <filnam.ext>

This would cause the specified file to be listed on the terminal you are logged
in on.

TYPE <filnam.ext>(2)/NONUMBERS

This would cause page 2 of the specified file to be typed out without line
numbers.

DIR FOO←*.TXT[*,*]

This would cause the filnam.ext, ppn, size, etc.  for all files in the world
with the extension TXT to be listed in the file FOO on your disk area.

COPY FOO←TTY:,FOO/ASCII

This would allow you to add text at the beginning of the file FOO (/ASCII is
mandatory).

RENAME FOO/PROTECTION=077

This would change the protection of the file FOO to 077 without doing a
transfer.

DIR[*,RPH]/QUIET

This will tell you the size of each of RPH's areas without printing the
filenames and other information.

COPY TEMP←↓$ED$09↓.TMP

This copies the file $ED$09.TMP into TEMP so that you can edit it.  (These names
are created by SOS.)

DELETE @DEL

This would use the file DEL as a list of files to be deleted.  This method is
very good for "cleaning" your area.

DIR FOO/WRITER

This would list the standard directory information for file FOO along with the
PPN and job name of the job that wrote the file.

RENAME [2,PRG]←*.*[1,PRG]

This would move all the files on [1,PRG] to the area [2,PRG], keeping individual
filenames intact.  Renaming across PPNs like this is much faster than COPYing
the files, since RENAME just changes the filenames without having to copy all
the data.
                                   A3  SPOOL


For printing files, there are several general purpose printers available to
system users.  These include the line printer, the XGP, and the Dover.  (As this
manual goes to press, it is expected that very soon there will be Canon printers
available too.)  To control normal output to these printers, there is one
phantom job assigned to each such printer.  These jobs are called spoolers, and
making a printing request is called spooling a file.  Each spooler decides, on a
priority basis, which file will be printed next, the priority being based on the
size of the spooled file and how long it has been waiting.  Spooling provides a
method of producing listings of files without the disadvantage of tying up a
user's job while waiting for (1) someone else's listing to finish and/or (2) the
user's own listing to be done.  Spooling requests are recorded in temporary disk
files which are read and processed by the spoolers.  The user makes, deletes, or
examines spooling requests with one of the commands shown below.

  SPOOL    request line printer listing of specified file(s)
  XSPOOL   request XGP listing of specified file(s)
  DOVER    request Dover printing of specified file(s)
  UNSPOOL  allow selective deletion of spooler requests
  QSPOOL   display spooler status and queues

As an example of spooling a file, the monitor command

XSPOOL MONCOM.UPD[S,DOC]

will cause the XGP spooler to list the file MONCOM.UPD[S,DOC] (which is the file
of updates to this manual).

Spooled listings are normally preceded by a title page used to make it easy to
separate different listings (see the /NOTITLE switch below, for suppressing the
title page).  This title page includes the filename, the real name and
programmer name of the requestor, the current date and time, and the date and
time when the file was last written.  (User names are read from the file
FACT.TXT[SPL,SYS].  The few project names are read from the file
XFACT.TXT[SPL,SYS].)  In addition, each page printed usually bears a heading
line at the top showing the filename, date and time printed, and page number
(see the /NOHEADING switch below, for suppressing the headings).

In the discussion below, "SPOOL" is used to mean any one of the commands SPOOL,
XSPOOL, and DOVER, except as noted, and "spooler" means the corresponding system
phantom.

To have the spooler make a listing the user must tell the spooler what file(s)
to print.  The easiest way to tell the spooler what to do is by using the
monitor command SPOOL (or XSPOOL or DOVER).  This command consists of the word
SPOOL followed by the name(s) of the file(s) to be listed.  File names are
separated by commas.  Each file name may be followed by switches, explained
below.

Files to be spooled are specified in the conventional way, starting with an
optional device name, then the file name, the extension, and optionally a
project-programmer name.  If no extension is specified, and the given file name
does not exist with no extension, then .LPT, .XGP, and .PRE are assumed for the
SPOOL, XSPOOL and DOVER commands respectively.  If no device is specified,
device DSK is assumed; any device given (most often a UDP) must be available to
the spooler (in the case of a UDP, it must be ASSIGNed by someone else until the
spooling is finished).  Most of the filehacks available in COPY can be used to
select files for the spooler; for example, SPOOL \MAIL:ME(1) will spool page one
of ME's mail file.  See page 110 for a list of the filehacks; those that specify
more than one file (e.g., \OPTION) are not relevant to spooling.

An asterisk, *, may be used to allow matching of any file name, extension,
project name, or programmer name.  (RPG, DMP, and REL files will not be matched
by * in the extension.)  This feature can used in conjunction with the /ASK
switch (see below) to allow the user to select which of several files should be
printer.

Switches are allowed either preceding or following a filename.  Switches that
precede a name are sticky and will be applied to subsequent names.  A switch
consists of a slash, the switch name and, sometimes, a parameter, for example,
/REPEAT=5.

The following switches are available.  Note that most switches occur in two
senses (e.g., /DELETE and /NODELETE).  This allows an explicit switch in some
term to override an earlier sticky switch.

  Switch(es)       Action (of first switch, where a pair is given)

  DELETE,NODELETE  DELETE this file after printing.  The file protection of
                   this file must be low enough so that the spooler can delete
                   it.
  NONUMBER,NUMBER  Omit SOS line numbers from the listing.  "N" is an accepted
                   abbreviation for NONUMBER.
  FORTRAN,NOFORTRANInterprets the first character of each line of the file as
                   a FORTRAN carriage control character.
  HEADING,NOHEADINGPrint a page heading at the top of each page.  "H" is
                   accepted as HEADING.  HEADING is the default for all files,
                   except those with .LST extensions.  The heading includes
                   date, time, filename, and page numbers.
  TITLE,NOTITLE    Precede the listing with a title page.  TITLE is the
                   default for all files.
  NARROW,NONARROW  Center the title page to fit an 8.5 inch wide page (for
                   line printer listings only).
  RECOPY,NOCOPY    Copy the file to [SPL,SYS] and list the copy.  This allows
                   the original file to be edited while the copy is being
                   printed.  The copy will be deleted after being printed.
  REPEAT=n         Make n copies of the listing. (REPEAT is NOT sticky.)
  EXTRA=n          Insert n extra line feeds in the listing after every line
                   feed in the file.  (EXTRA is NOT sticky and is not allowed
                   with Dover spoolings).
  DUMP,NODUMP      Octal listing.  Data will be printed as octal full words.
                   (OCTAL is an equivalent switch.)  This feaure is NOT
                   implemented for the Dover spooler.
  NOFF,FF          Translate each line feed in the file to a special character
                   which causes single spacing with no form-feed between pages
                   (suppresses the form-feed usually inserted after about 60
                   lines).
  NOWARN,WARN      Suppress "spooling done" typeout after listing.
  ASK              Ask the user which of the specified files should really be
                   spooled.  For each file, SPOOL will type the filename and
                   wait for the user to answer with "Y" to spool the file or
                   "N" to skip it.  This is useful with * filename terms.
  HOLD=hhmm        The listing will be held in the queue until the time
                   specified by hh hours, mm minutes.  (24-hour time is
                   assumed.)  If hhmm is prior to the current time, hhmm
                   tomorrow is assumed.
  MODE=n           Open the file in mode n (n is octal).
  QSPOOL           Type out the particular spooler's status and its queue
                   after entering the request.

Some additional switches are available for particular devices, for instance
margin switches can be used with the XGP and Dover.  These will be explained
later.

File specifications may be read from an auxiliary file by including in the
command line the name of the auxiliary file preceded by @.  This file may
include file names and switches.
                                Delayed Listing


Usually requests for spooled listings will be processed as rapidly as possible.
Under some circumstances this may not be desired.  For example, a long listing
impacts the normal operation of the system by making the printer unavailable
during its duration.  The spooler allows users to delay such listings until a
time of minimum loading (e.g., 0500) when the unavailability of the printer is
less likely to interfere with other users.  To specify a delayed time of
printing, use the switch /HOLD=hhmm, where hhmm is interpreted as the 24-hour
time of day when the listing should actually be sent to the printer.  In the
example below, 1730 will be interpreted as 5:30 PM.

Example:

SPOOL SYSTEM.LST[S,SYS]/HOLD=1730

If the time specified is before the current time of day, this is interpreted to
mean, "list the file tomorrow at the time specified." That is, if at 10PM you
give the command:

SPOOL BAZ.FAI/HOLD=400

then the listing will occur in six hours.
                                 Page Selection


You may follow a file name by a list of ranges of pages that you want listed.
The list must be parenthesized.  For example:

SPOOL FOO.SAI (1,7,5:8)

will cause page 1, page 7, and pages 5 through 8 inclusive to be listed.  Page
ranges are never sticky.

In octal dump mode, such a range list is used to specify a word range to list,
rather than a page range.
                           Multiple Copies of a File


The REPEAT switch, /REPEAT=n, makes n (decimal) copies of the file(s) it is
applied to.  When multiple copies are made on the line printer, no title pages
are printed for the second and subsequent consecutive copies.
                    A3.1  XSPOOL and DOVER Special Features


Since the XGP and the Dover have greater flexibility than the line printer, the
XSPOOL and DOVER commands can take more spool parameters than the SPOOL command.
The switches below are legal only in one or both of the XSPOOL and DOVER
commands.  However, when spooling a Press file (.PRE) on the Dover, none of
these switches can be used, since Press files contain their own complete
formatting information.  In some of these switches, a row or column parameter
must be given; on the XGP these rows and columns are measured at about 200 per
inch, and on the Dover these rows and columns are measured at 1000 per inch
(although actual Dover resolution is only 374 per inch).

  FONT#n=f   This is used to specify a font to be used in printing the file on
             the XGP or Dover.  n is a number from 0 to 127 decimal, but is only
             relevant for XGP spoolings, since the Dover spooler cannot specify
             multiple fonts except in PRESS files, which already contain the
             complete font specifications.  f is a font name; for XGP listings
             it is a filename, whose default name, extension and PPN are
             GACS25.FNT[XGP,SYS]; for Dover listings, f is a Dover font name,
             optionally including the size at the end, and the default is SAIL8.
             The XGP spooler will use the font named f as font n; if #n is
             omitted, n=0 is assumed.  See also XGP partial font loading below.
  FSIZE=n    (Dover only) Set the font size to n, where the default is 8.
  ROTATE     (Dover only) Rotate the listing 90 degrees counter-clockwise,
             making the page be wider than it is long.  This is useful for
             printing files formatted for a line printer (i.e., that have very
             long lines).  When this switch is used, the defaults for the
             listing become: FONT=SAIL8, NCHARS=132, LHEIGHT=115, NLINES=58,
             TMARGIN=1070, LMARGIN=950, BMARGIN=850.
  LMARGIN=n  Set the left margin to column n, where column 0 is approximately
             the left edge of the paper.  The left margin is the column which
             the carriage return character selects.  On the XGP, with about 200
             columns per inch, the default left margin is 200.  On the Dover,
             with about 1000 columns per inch, the default left margin is 1070.
  RMARGIN=n  (XGP only) Set the right margin to column n, with the default being
             1650.  If the XGP is going to write a character that exceeds this
             margin, a new line will be started, unless NOWRAPAROUND mode is in
             effect (see below).
  NCHARS=n   (Dover only) Set the maximum number of characters per line to n,
             with the default being 95 characters per line.  If more characters
             than this appear on a line, then a new line is started after every
             n characters.
  TMARGIN=n  Set the number of blank rows between the top edge of the page and
             the first line of text.  The default top margin is 200 on the XGP
             and 1092 on the Dover.
  BMARGIN=n  Set the number of blank rows between the bottom of the text and the
             bottom edge of the paper.  The default bottom margin is 200 on the
             XGP and 950 on the Dover.  The XGP spooler interprets BMAR=0 to
             mean no paper cutting.
  PMARGIN=n  (XGP only) Set the number of rows in the page body to n, the
             default being 1800.  Text is written inside this area.  (The
             spooler interprets PMAR=0 to mean that the end of a page body is
             signalled only by a form feed in the file, for variable-length
             pages.  This is true only if BMAR≠0.)
  LHEIGHT=n  (Dover only) Set the line height (vertical distance per text line)
             to n rows (with about 1000 per inch).  The default height is 133.
  NLINES=n   (Dover only) Set the number of text lines per page to n.  Use of
             this switch implicitly sets LHEIGHT.  The default number of lines
             per page is 68.
  XGP        (XGP only) The first page of the file is taken as font and margin
             commands, preceded by slashes as in the command line.  Only the
             special XGP spooler switches (the ones in this table) are allowed.
             Carriage returns are ignored.  If the first page of the file is an
             E directory, the second page is used for the commands.  The command
             page is not printed.  A file extension of .XGP also invokes this
             feature.
  NOXGP      (XGP only) Turns off /XGP.
  XLINE=n    (XGP only) Set the minimum interline spacing to n rows, the default
             being 4.
  NTNODE=n   (XGP only) Set the number of text nodes allocated by the monitor
             (see below).
  NVNODE=n   (XGP only) Set the number of vector nodes allocated (see below).
  WRAPAROUND (XGP only) Allow long lines of text to wrap around to the next line
             upon reaching the right margin.  This is the default, and as a
             result this switch cannot appear in a /XGP file header.
  NOWRAPAROUND (XGP only) Discard text that occurs on a line after the right
             margin has been reached.  This switch can definitely appear in a
             /XGP file header.
  PLIMIT=n   (XGP only) Set the maximum expected pages of paper (at 11 inches
             each) to be printed to n.  This switch is for getting the XGP
             spooler to make a more reasonable priority calculation for a file
             being printed.  When this switch is NOT used, the priority
             calculation is based on the length of the entire file, even if only
             a small part of the file is being printed.  For instance, if you're
             only spooling one page of a giant file, your request will get a
             much bigger priority if you include /PLIMIT=1.  If your spooling
             exceeds the given page limit, however, the printing will be
             terminated immediately.

Text nodes and vector nodes are units of core storage allocation used by the
monitor's XGP service routines.  Generally, you need not worry about them, but
if you have trouble printing a complex document the allocation control switches
may be able to help you.  See a system wizard to find out.

The /XGP switch, when present, turns off the usual default assumptions about
other switches; in particular, /HEADING is not assumed unless it is explicitly
used.  Spooling a file with extension .XGP implies a default of /NONUMBER as
well as /XGP.

More XGP peculiarities:

If any FONT select switch specifies some font number other than 0, no /HEADING
switch will be assumed unless it is explicit.

Page headings will occur in font#0.  Whatever font was in effect before the
heading line will be reinvoked before any further processing.  The title page,
if present, will be made in font#0.

The title page will contain any page specifications and format-affecting
switches (e.g., /HEADING but not /REPEAT) which came from the XSPOOL command.

Partial font loading: A font select switch of the form /FONT#n=file=charss is
permitted in a /XGP file header to tell the system font compiler to load only
the characters in the string charss from this font.  The string is terminated by
the first character which appears twice in a row (including null).  The
terminating character is included in the ones to be loaded.  This switch is
useful if a document needs just a few characters from many different fonts, and
the complete fonts would be too big for the amount of core storage available to
the font compiler.  The monitor command XPART can be used to generate an /XGP
file with partial font loading (and/or only selected pages of text) from another
/XGP file; see the XPART documentation in the file XPART.DON[UP,DOC].

An additional switch, /USETI=n, is also allowed only inside a disk file when
/XGP is in effect.  It indicates that no more switches are on the current page
(which is the first page of the file, or the second if there is an E directory),
but that more switches can be found starting at record number n (decimal) of the
file.  No text in or after that record will be printed.  The switch is meant for
one-pass document compilers which want to use the partial font loading feature
but don't know until after writing the output file what characters will be
needed.

The switch /END can be used to terminate the /XGP switches that are being read
from the file itself.  The rest of the current page, up to the next formfeed, is
completely ignored.  You (or a program) can use this to stick comments in this
part of the file.

Suspended XGP listings: The XGP spooler sometimes breaks a long listing into two
or more parts in order to let shorter listings through without their having to
wait until the long listing is completely finished.  Thus it is not necessary
(or desirable) for users to break up long XGP spooler requests into pieces.

A listing being made with BMAR=0 (no paper cuts) will never be suspended.  For
all other listings, the spooler uses the following rules to decide whether or
not to suspend the current listing:

The spooler only considers suspending a listing when a formfeed (pagemark) is
encountered in the input file.  To avoid suspending a listing that was about to
finish anyway, the spooler will not consider breaking a listing that is within
two records of the end of the file.

When a formfeed is encountered with more than two records left in the file, the
spooler checks to see if the "guaranteed unbreakable" minimum amount of paper
has been output for the current listing.  This minimum is currently 25
normal-size (11-inch) pages.  Note that the spooler actually checks the amount
of paper spewed out, not the number of pages.  If less than the minimum paper
has been output, then no break is considered and the listing continues.

If the minimum amount of paper has already been printed, the XGP spooler checks
to see if anyone is in the device-wait queue (DWQ) waiting for the XGP.  If so,
the current listing is suspended and the spooler releases the XGP.

If no job is waiting for the XGP, the spooler checks to see if 40 formfeeds have
been output since the last time it checked the priorities of spooler requests.
(The spooler of course checks priorities before starting a listing.)  If not,
the listing continues.  If so, then the spooler re-checks the priorities of all
the XGP spooler requests.  In making this check, the priority of the request in
progress is figured based on the amount of the input file that is left, not on
the total size of that file.  If the current listing still has the top priority,
then it is continued, although a page or two of blank paper may have come out of
the XGP while the spooler was thinking.  If the current listing no longer has
the highest priority, then it is suspended and the new top priority task is
started.

When a listing is suspended, the requestor's terminal will get a message and the
last page of XGP output will be a short piece of paper indicating that the
listing was suspended and giving the page number at which the suspension came.
When the listing is resumed, another terminal message is sent.

When the XGP stops working for some hardware reason (out of paper, KA-10 down,
etc.) the current listing is suspended; it will be resumed when the XGP is ready
again.
                            A3.2  The QSPOOL Command


The QSPOOL command starts the SPOOL program in a special way.  QSPOOL reads the
directory of [SPL,SYS], interprets the contents of the spooler command files
there, and displays the queue of files to be printed by each spooler.  It also
shows each spooler's current status.  The QSPOOL command may be given without
logging in.

The commands QSPOOL/LPT, QSPOOL/XGP, and QSPOOL/DOVER will display spool
requests only for the indicated device.

The queue is based on a priority scheme.  The priority of a spool request is
determined by:

  (time waiting to print, in minutes + 1) / (file size in records)

However, this time waiting does not include time while the spooler is printing a
listing that was requested by the same user.

Requests are processed in the order of decreasing priority.  (The priority of a
suspended XGP listing is based on the number of records remaining in the file,
rather than its total length.)

On a display, QSPOOL will display the queue status repeatedly (every 15 seconds)
for 3 minutes or until stopped by the user's typing RETURN.  On a non-display,
QSPOOL just types the information once.  The command QSPOOL/TYPE will type the
information once even if at a display.

The queue display updating that happens every 15 seconds will continue for about
3 minutes after the last command given before automatically stopping.  Typing
BREAK I will make the updating continue for about 30 minutes, and typing ESCAPE
I will make it stop in 3 minutes.

While the queue(s) are being displayed, you can give any of these commands:

  ALT              Update the display immediately without waiting 15 seconds.
  RETURN           Terminate the displaying (exit if came from monitor cmd).
  LINE             Same as RETURN
  αβE              Same as RETURN
  <switches>RETURN Select particular mode(s) and continue.  One or more
                   switches can be included.  When any switches are given
                   while displaying the queue(s), the default is to resume
                   outputting all the queues (hence the significance of the
                   /DISPLAY switch below).  Also, the normal 15 second delay
                   is suppressed when any switches are given; the display will
                   be updated immediately (unless /TYPE was given).  Here are
                   the available switches:
  /DISPLAY         Display the queues; given alone, this switch displays all
                   the queues.
  /TYPE            Type the queues; given alone, this switch types all the
                   queues.
  /XGP             Output only the XGP queue.
  /DOVER           Output only the Dover queue.
  /LPT             Output only the line printer queue.
  /ALL             Output the [SPL,SYS] command file name for each queue
                   entry.

Any switch may be abbreviated to just one letter after the slash, but giving an
illegal switch will terminate the display.

Note that it takes about three times as long to evaluate and display all three
queues as it does to handle just one.  This means that the display will appear
sooner if you ask for only the one queue that you are really interested in,
e.g., with Q/D, Q/X, or Q/L (these are currently acceptable abbreviations).
                             A3.3  UNSPOOL Command


The UNSPOOL monitor command displays all the spooler requests that you (your
programmer name) have requested and allows you to delete any of them.  If you
delete a request which hasn't been seen by the spooler, then nothing special
happens since the spooler is not yet aware of the command, so it won't be
missed.  If it happens that the spooler is already printing a file you are
unspooling, then the listing in progress will be purged (aborted before
completion).

If you give the command UNSPOOL/ALL, or if you give the command REENTER after
UNSPOOL exits, then not only are you allowed to purge any spooling that is
either in progress or pending, but you also can change the spooler behavior in
the following ways:

  1. You can cause the present listing to be purged.
  2. You can cause the present listing to be started over.
  3. You can cause the spooler to hold the queue (and release the device) before
     starting the next file.
  4. You can release the queue from the state induced by holding it.
  5. You can cause the XGP spooler to consider suspending the current listing at
     the next page mark, even if its guaranteed minimum page count has not been
     met.

The commands UNSPOOL/LPT, UNSPOOL/XGP, and UNSPOOL/DOVER will allow and deleting
of spool requests only for the indicated device.
                                    A4  MAIL


This appendix describes several programs that are useful for sending and
receiving messages, monitoring public discussion files, and scheduling delayed
program running.  The main programs discused here are MAIL, RCV, CANCEL, CKMAIL
and CKSUM.  See also E.ALS[UP,DOC] on the use of E in reading mail files and
sending messages; E is the primary program used to read messages.
                             A4.1  The MAIL program


The MAIL program is used to send messages to users and sometimes to arbitrary
disk files for special purposes.  The program is invoked by one of several
monitor commands, depending on the function desired:

  MAIL     send a message to one or more message files
  SEND     send a message to the terminals of one or more users
  GRIPE    send a message complaining about a system problem
  REMIND   schedule a message to be sent at some later time
  PLAN     create a file describing how to find you when not logged in
  EVENT    send a message to all users about an event on a given date
  BATCH    schedule the execution of a command string at some later time
  LATER    schedule the execution of a given program at some later time
  RETRY    send any messages which were queued by earlier failing operations
  NAME     give a user's real name and tell if and where his mail is forwarded

The commands MAIL, SEND, and GRIPE may be given when not logged in, so that
people who are not authorized users of our system can use them to communicate
with us.  A user who is not logged in will be asked for his name, which will be
included in the header of the message.  However, users who are not logged in may
not use wildcard (send to all users) or network destinations.

The commands MAIL, SEND, and REMIND require a list of destinations (recipients
of the message).  All of the commands except NAME, LATER, and RETRY require some
message text and also can be modified by the use of certain optional switches,
either applied globally (all destinations) or just to a particular destination.
The commands REMIND, PLAN, EVENT, and BATCH all require a date and/or time which
can be included by itself or in a global /DATE or /TIME switch.  (Any date given
must appear before any time given, whether in switches or not.  See the section
below on dates and times.)

GRIPE takes one or more single-word gripe topics, e.g., GRIPE MAIL to report a
problem with the MAIL program.  This will be more fully explained on page 135.

NAME takes a programmer name and types the user's real name and forwarding
address (if any).  See page 138.

LATER takes up to four specific arguments which describe the program to be run
and when it is to be run; these will be described on page 140.

RETRY takes no arguments at all; it merely looks for queued mail originating
from, or destined for, the current user and tries once again to send each such
message (this will be done automatically if RETRY is not used).

The normal command syntax includes all necessary information on one or more
lines without much prompting.  There is an alternative format, called
hand-holding mode, in which each piece of information required is prompted for
separately.  Hand-holding mode is more verbose and time-consuming to use, but
may be less confusing to new users.  It is invoked by typing just the command of
interest without any arguments, and will be described in a separate section.
What follows here assumes that the normal syntax is being used.

Before explaining the complete range of command options, here are a few sample
commands:

SEND BH Want to have dinner?

This is a very simple example of a command with one destination and no option
switches.  It types the message "Want to have dinner?" on BH's terminal if he is
logged in, along with a header indicating who sent the message.  If BH is not
logged in, MAIL asks if the message should be mailed instead of sent.

MAIL/DIST @NL Language group meeting Tuesday at 3pm.

This command mails the message "Language group ..." to the mail files of the
users listed in the file NL.DIS or NL or NL.DIS[P,DOC] (the [P,DOC] file
directory contains lists of users by project group).  The first file in that
list which exists is used.  The message will include the standard header
indicating who sent the message and when, and also (because of the /DIST switch)
a line indicating to whom the message is being sent.

REMIND/DATE=10-*-* . Rent due tomorrow

This command reminds the user who isssued the command (because of the "."
destination meaning self) to pay the rent on the tenth day of each month of
every year.  The reminder is both mailed and sent each time, and expires after
50 times.  (These are default conditions modifiable by switches.)
                              A4.2  Command Format


The command format for all MAIL commands except NAME, LATER, and RETRY is shown
below.  (The formats for the NAME, LATER, and RETRY commands are explained in
the sections on those commands beginning on page 138.) Here is the usual command
format:

<command & global switches> <destinations & local switches> <message>

The <destinations & local switches> part only applies to the MAIL, SEND, and
REMIND commands.  Destinations and destination lists will be described in the
next section.  There are no destinations for the BATCH command.  EVENT and PLAN
have implicit destinations, and GRIPE uses gripe topics as destinations.

The message text can be provided in any of three ways: (1) a one-line message
can be included after the destinations on the command line and ended with <CR>;
(2) if no message specification is given on the command line (or the same line
as the last destination for a multi-line command), MAIL asks for a message (any
number of lines) to be entered from the terminal, ending with the end-of-file
character (<CONTROL><META><LF> from a display terminal or local PTY, <control>Z
otherwise); or (3) if the notation

@file.ext[prj,prg]

is used on the command line after the last destination, the message text is
taken from the specified file.  If no extension is typed, the extension .TXT is
tried first, and then a blank extension.  To force the use of a filename with no
extension, type the dot but no extension, for example:

@file.[prj,prg]

The file may contain an E directory or SOS line numbers, which will not be
included in the message.

If something not starting with "@" follows the destination list on the command
line, it is taken as the message text.  This makes single-line messages more
convenient to enter.  If you start to enter a single-line message, and decide
you need more than one line after all, end the command line with <LF> instead of
<CR> and you will be allowed to continue the message on later lines.

If the command line specifies that the text comes from a file, and the command
line ends with <LF> instead of <CR>, MAIL allows the user to append text from
the terminal.  That is, a command like

MAIL FOO @FILE<LF>

reads the text from the file, echos the file to the terminal as it reads, then
says "Continue message followed by ..." (with the right EOF character for your
terminal), then allows further typein.  This can be used, for example, to mail
someone a copy of another message and append your own comments.  As explained
below, a <BS> (backspace) at the beginning of a line deletes the previous
<CR><LF> and allows editing the previous line, even if the previous line came
from the file.

While typing the text of a multi-line message (not message text on the command
line itself) you can type <CONTROL><META>I to insert a file at that point.  MAIL
asks for the filename, reads the file and echos it, then asks you to continue
typing.

When entering a message, the usual line editing facilities are available.  In
addition, if the <BS> key is typed when the input line is empty (i.e., at the
beginning of a new line), the last line typed is loaded into the line editor (on
a display) or input buffer (on a non-display) and the cursor is positioned at
the end of that line.  The text of that line is deleted from the accumulated
message.  The effect is that a carriage return can be deleted by <BS> like an
ordinary character.  It is possible to back up another line by doing another
<BS> after clearing the newly reloaded line.  This procedure destroys the lines
that followed the one to which you back up, and the backup is only possible for
a small (about 30) number of lines.

When entering a message from a display, a better facility is available for
correcting errors in the command or in the message more than one line before the
current line.  Typing <CONTROL><META>E at the end of a line of message text will
cause an E-format file called MAIL$E.TMP to be written on your login disk area
(not alias) with the command, switches, and destination list that you gave on
page 2, and the message text up to the <CONTROL><META>E on page 3.  Then E is
run automatically on this file to allow you to edit the text and/or command.  E
will start up positioned at the beginning of the message text on page 3, but you
can modify the command or destinations by editing page 2 (page 1 will be the E
directory page).  When you are finished editing the message and command, type to
E the command <CONTROL>XRUN to restart the MAIL program automatically and send
the message as edited.  The MAIL$E.TMP file is automatically deleted after the
message is sent.  Note: if you accidentally or purposefully exit from E without
saying <CONTROL>XRUN, you can still send the message from MAIL$E.TMP by simply
editing that file with E (using /R if you don't need to further edit the message
or command) and then giving E the command <CONTROL>XRSYS MAIL, which will run
MAIL to send the message and delete the file.

The character <CONTROL><META>E cannot be typed on the MAIL command line itself,
because control characters are not allowed in monitor commands.  Therefore, on
the command line only, the character <ALT> will start running E.

The character <ALT> cannot appear in a message (because it is a line editor
activator and would confuse some mail-reading programs).  If an <ALT> is seen in
the message text as input (other than on the monitor command line), it is
changed into a dollar sign ($).  Also, the character <FORM> cannot appear in a
message (because it would mess up the E-format of mail files).  If a <FORM> is
seen in the message text as input, it is changed into an exclamation point (!).
Finally, the character <BS> cannot be part of a message text.  This is not a
problem if the message is entered from the terminal, because <BS> is interpreted
as a line editor command, but if a <BS> is seen in a message text file, it is
changed into a lambda (λ).

If the /SUBJECT or /NOMSG switch is used to include a subject line in the
message header, the subject is taken from the first text line entered: for a
file, the first line of the file is the subject; what would otherwise be a
single-line message is taken as the subject line for a multi-line message to
follow.  If no message is provided on the command line, you are prompted for a
subject line and then for the message text (except that /NOMSG implies that
there is no message text).
                    A4.3  Destinations and Destination Lists


The commands MAIL, SEND, and REMIND require one or more recipients, or
destinations, specified in a list called the destination list.  The destinations
should be separated by commas.  The list may extend over more than one line if
the lines before the last end with comma.  (Any characters from a semicolon to
the following linefeed are ignored.)  The following types of destinations may be
used:

  prg              programmer name of local user
  .                yourself
  *                notice for all users, giving (SEND only) reminder about ARPA* & LOCAL*
  **               notice for all users, but (SEND only) suppresses reminder
  ARPA*            (SEND only) all users logged in via any network
  LOCAL*           (SEND only) all users logged in on local DD or III displays
  name             real name (or leading substring) of local user
  % host           sticky network host to be used for following names
  name % host      user at another network host
  name@host        user at another network host
  #fil.ext[pj,pg]  (MAIL only) arbitrary file to receive message
  TTYn             (SEND only) terminal to receive message
  n                (SEND only) job number to receive message
  @fil.ext[pj,pg]  file containing destination list

The form "prg" in the above list must be one to three letters and digits, the
first of which is a letter (upper and lower case letters are equivalent).  The
forms "name" in the above list must consist of either any number of letters,
digits, and hyphens, starting with a letter, or of arbitrary characters enclosed
in quotation marks ("...") or downarrows (↓...↓); however, the "name" in
"name % host" can include dots as well as letters, digits and hyphens, since
this represents a user name at another network host (e.g., ADMIN.ME%SCORE).  For
the form "name@host" to be accepted, there must be no spaces between the "name"
and the "@"; this is to avoid confusion with the "@fil.ext[pj,pg]" destination
form.  In the SEND command, the TTYn form may optionally be followed by a colon.

Network hosts are specified by host name (letters, digits, and hyphens starting
with a letter) or by decimal host number.  If the host name is used it can be
abbreviated by enough characters to identify it uniquely.  Many hosts have short
nicknames recognized by the network programs on WAITS.  Host names for either
the ARPAnet or the SUNet (Ethernet)* can be given.  Mail to other networks, for
instance networks connected to other ARPAnet hosts, can sometimes be
accomplished by using a special destination name with the name of the ARPA host;
e.g., MAIL "SoAndSo@MIT-XX" %MIT-AI will mail a note to SoAndSo at MIT-XX (on
the MIT CHAOS net) by sending the message first to MIT-AI.  MAIL currently
doesn't accept host names for hosts other than those on the ARPAnet or SUNet,
although this may be fixed sometime after this manual goes to press.

A host may be specified for a single destination, using the "name%host"
notation, or a sticky host may be specified by just "%host".  A sticky host will
apply (until another sticky host is specified) to all following destinations
that start with a letter or a quote character and which do not have a host
specification themselves.  A host name of SU-AI (or SAIL) will override a sticky
host but will not actually send the message via the network.  A sticky host name
given outside an indirect file does not apply to destinations inside the file,
and a sticky host name in such a file applies only to destinations named
immediately in that file.

More information about network mail will be given in a later section.

In the #file construction, if no extension is given the default extension
of .MSG is used.  To mail to a file with no extension, you must type the
filename in the form "#file." with no extension after the dot.

In the @file construction, if no extension is given the default extension
of .DIS (distribution list) is tried first.  If that file does not exist, then
the null extension is tried next (both of these on your current alias disk area
unless you gave an explicit PPN).  If neither of these exists, then the
extension and disk area .DIS[P,DOC] is tried (unless you gave an explicit PPN).
The [P,DOC] directory contains several distribution lists derived from the
laboratory personnel directory.  For example,

SEND @VB Time for volleyball!

will send that message to all known volleyball players as listed in the file
VB.DIS[P,DOC].  Distribution list files may contain E directories or SOS line
numbers.  Only the first page (second page if in E format) is read.  Everything
on that page will be interpreted as destinations even if not properly separated
by commas.  (The semicolon format for comments will work.)

For the MAIL command, if there is a file called OUTGO.MSG in your login (not
alias) directory, it is automatically included as a destination for the message.
This provides a simple and automatic method for saving a copy of each message
you MAIL to anyone.  The /-OUTGO switch can be used to prevent sending a copy to
your OUTGO.MSG file.

MAIL cannot be sent to local users who do not have file directories.  However,
if you must MAIL a message to a programmer name that has no file directories,
you can do

MAIL #"   prg".MSG[2,2]

to mail explicitly to the message file of programmer name "prg" (prg should be
right-justified in six quoted spaces).

The check for syntax validity and existence of local users is made as soon as
the destination list is read.  If some but not all of the destinations are
valid, MAIL asks whether or not it should proceed using the valid ones.  If you
want to correct a mistake in a destination (or in a switch or in some part of
the message already typed) before sending the message, answer no to the query
and then use the monitor command REENTER, as explained on page 142.

For the SEND command with a multi-line message (so the destination list is read
before the message has been entered), a warning message is given if any
programmer name recipient is not logged in.  This warning does not require
reconfirmation before the command is executed.

For people who want to send mail to people listed in a file designed for use by
SNDMSG at a TENEX site, which requires a different syntax, the /ARPA switch can
be used to cause distribution list files to be parsed differently, including the
use of "@" to indicate a network host name.  Obviously nesting of distribution
list files is not possible within such a file.  See the description of the /ARPA
switch below for more details.

------
* As we go to press, MAIL's current Ethernet host name parsing is somewhat
limited, but this will probably be fixed very soon. If MAIL fails to understand
an Ethernet host name you give, try a different pseudonym for the same host.
                             A4.4  Message Formats


Messages are usually sent preceded with a special header which tells who sent
the message and when it was sent.  This header takes three forms: one for
messages being typed out on terminals (SEND command), another for local (SU-AI)
mail files, and a third for messages sent out over the network.  The header may
be followed by an optional distribution list (explained below).  After the
distribution list (if present), the message text is sent followed by a blank
line (unless the message already ends with a blank line).  SEND leaves off the
extra blank line when typing the message on terminals.

The header used for local files starts with a partial sign to facilitate
detection of the beginning of each message by various message editing programs.
To ensure that trouble is not caused when a partial sign actually occurs in a
message, any partial sign that occurs as the first character in any line of a
message is indented by one space, whether or not the message is going only to
local files.

Here are examples of the first two header formats:

;; Message from ME   at TTY6  1735      Records

∂06-Jan-82  1735        ME      Records

The SEND header (first above) contains the sender's programmer name, terminal
number, the 24-hour time of sending, and then the subject (if any).  If the
sender is at a Data Disc terminal, the header contains the number of the
responsible physical terminal as well as the TTY number.

The local file header (second above) contains a partial sign followed by the
date and the time of day, then the sender's programmer name and the subject (if
any).  The local file header can be suppressed by use of the /-HEADER switch
(see the section on switches below).  However, this switch is not recommended
for general use when mailing to users' message files since it causes the message
to be sent without any identification about who sent it or when it was sent; in
fact, it effectively causes the message to be appended to some other message in
the file.  This switch is useful, however, when mailing text to a special file
which is simply to contain message text.

In both the SEND header and the local file header, if the sender was logged in
via a network at the time of sending, the phrase "via host" will follow the
sender's programmer name, where "host" is the name of the host from which the
sender was connected to WAITS.  The name preceding the "via ..." is,
nevertheless, a WAITS programmer name.

If the sender is not logged in, his programmer name is 100 and he is asked to
supply his real name, which is included in the header.

If the message was sent to all users by a SEND * command, a "to *" phrase is
added to the header line to make it look like this:

;;Message to * from ME   at TTY6  1735  Records

Finally, if the message if being sent as a reminder (see the REMIND command),
then the programmer name in the header will be followed by an asterisk (*) as in
these examples:

;; Message from ME*  at TTY6  1735      Records

∂06-Jan-82  1735        ME*     Records

Now, here is a sample header for messages sent out over the network:

Date: 06 Jan 1982 1735-PST
From: Martin Frost <ME at SU-AI>
Subject: Records
To:   rmf at MIT-ML

The network header contains the date and time, the sender's real name as well as
his programmer name, the subject (if any), and the distribution list (list of
recipients of the message, starting "To:").

The distribution list can be omitted from network mail by use of the /NODIST
switch (see the section on switches below) and can be included in local messages
(MAIL or SEND) by use of the /DIST switch.  Note that /NODIST applies only to
network messages and /DIST only to local messages.  For messages MAILed to two
or more destinations, a global /DIST switch is assumed unless a global /-DIST
switch is given.  The distribution list may use more than one line if lots of
destinations were specified.  Also, some destinations may be listed on lines
beginning "CC:" instead of "To:"; such destinations are considered secondary
recipients of the message and are specified by use of the /CC switch with the
first such destination.

Normally, if a distribution list file was used to specify the recipients of the
message, a distribution list included with the message will contain only the
name of that file, not the actual recipients listed in it, to avoid very long
distribution lists.  The /LIST switch (see the section on switches below) will
list in the message the individual recipients named in the file.
                           A4.5  Message File Formats


When mail is sent to a file which already exists, the beginning of the file is
read to see if it contains an E directory.  If so, the message is added at the
end of the file preceded by a <FORM> so that the message will be on a new page.
The directory is not updated to reflect this new page, but the <FORM> will be at
a record boundary, so that when the file is next edited with E, the directory
can be updated without reformatting the file.  If the file does not already
contain an E directory, the message is added at the beginning of the file
without any <FORM>.  In this case, record boundaries are not necessarily
preserved.  The /APPEND switch will cause the message to be added at the end of
the file along with a <FORM> as if there had been a directory.  The /-HEADER
switch which omits the local mail header also omits the <FORM> which would have
just preceded the header in E format files.

When a message is sent to a file which did not formerly exist, the file is
created with an initial E directory so that subsequent messages will be added at
the end of the file.  The switch /-E can be used to omit this directory normally
inserted for a new file.  However, this switch and its inverse /E will be
ignored for user message files (*.MSG[2,2]) and for user plan files
(*.PLN[2,2]).  New user message files always get an E directory; user plan files
never do.

The command MAIL #LOGOUT can be used to send a message to the file LOGOUT.MSG,
which will be typed and deleted automatically when you log out (and have no
other jobs still logged in).  This file is created /-E automatically.
                             A4.6  Command Switches


Various switches can be specified in the command line to modify the operation of
the MAIL program.  Some apply only globally; these may appear either just after
the command name or after an individual destination.  Other switches can be
applied either globally (by appearing just after the command name) or to a
particular destination (by appearing just after that destination).  A switch
applied to a particular destination overrides a global switch.  Switches may
appear at the beginning of a distribution list file, in which case they apply
globally to all destinations within that file.  Switches appearing with the
@file destination format override file-global switches at the beginning of the
file.

A switch name may be abbreviated by enough characters to identify the switch
uniquely.  All switches are available in positive and negative senses (e.g.,
/LIST and /-LIST) except for the following switches which are not available in
the negative sense: /CC, /DATE, /TIME, /COUNT, and /ARPA; also, the switch
/-OUTGO is available only in the negative sense.  The default value for most
switches with a negative sense is the negative sense; the /HEADER, /E, and
/QUEUE switches are the primary exceptions, but in addition the /SUBJECT and
/DIST switches can be implied by the command.

Here are the available switches:

  Switch   Meaning of positive switch sense

  /NOMAIL  (SEND only) Do not mail the message to a destination programmer
           name if the user is not logged in.  Suppresses the question about
           such mailing.
  /YESMAIL (SEND only) Do mail the message to a destination programmer name if
           the user is not logged in.  Suppresses the question about such
           mailing.
  /MAIL    (SEND only) Mail the message to a destination programmer name as
           well as sending even if the user is logged in.  Suppresses the
           question about mailing of SEND messages which would be asked if a
           destination programmer name were not logged in.  If /MAIL is used
           globally (SEND/MAIL), then the command will record the message in
           your OUTGO.MSG file, if it exists.  (Note that this switch has a
           different meaning for the REMIND command--see below.)
  /MAIL    (REMIND only) Do not send the reminder to the destination
           programmer name when the time comes, only mail it.  Normally
           reminders are both mailed and sent.  (Note that this switch has a
           different meaning for the SEND command--see above.)
  /SEND    (REMIND only) Do not mail the reminder to the destination
           programmer name when the time comes, only send it.  Normally
           reminders are both mailed and sent.
  /DIST    Include the list of destinations in the text of the message for
           local recipients (see message format in a previous section).  A
           global /DIST is implied by the MAIL command when two or more
           destinations are given unless a global /-DIST is specified.
           Compare /NODIST below.
  /NODIST  Do not include the list of destinations in the text of the message
           for network recipients (see message format in a previous section).
           This switch is not the inverse of /DIST!
  /NO      This is equivalent to /NOMAIL for the SEND command and to /NODIST
           for the MAIL command, so that /N can be used to abbreviate the
           appropriate switch.
  /CC      List this destination and all after it as secondary (CC) recipients
           (see message format in a previous section).  This switch implies
           /DIST unless a global /-DIST is given.
  /SUBJECT Include a subject line in the message.  The effect of this switch
           is always global.  /SUBJECT is implied by the MAIL and GRIPE
           commands unless some message text or the name of an indirect
           message file or the /-SUBJECT switch appears on the command line.
           However, typing just <CR> to the "Subject:" prompt will omit the
           subject from the message.  Subjects are useful in local mail files
           because the first line of each page (usually the header line of a
           message) appears on the directory page in an E-format file, and for
           local files the subject is included in the header line and thus in
           the directory.
  /NOMSG   This switch is used for a message with no text other than the
           subject.  There must be a subject, and /SUBJECT is implied.  Any
           message text appearing on the command line is taken as the subject
           rather than as the text.  If no text appears on the command line,
           MAIL prompts for a subject but not for a text.  The intent is to
           allow a message which fits on one line of a local mail file, so
           that the text appears in the recipient's E directory.
  /WHERE   (MAIL and SEND only) Type the wholine of each job that is logged in
           under a programmer name included in the destinations.
  /QUEUE   Queue network mail for later delivery without first trying to send
           it immediately.  The first attempt (by the remind phantom) to send
           such queued mail will happen right away.  This switch defaults on,
           but affects only the MAIL command; network SENDs are done while you
           wait.
  /APPEND  (MAIL only) Put the message at the end of the file instead of the
           beginning even if it has no directory.  A <FORM> will precede the
           message (unless /-HEADER was given).
  /LIST    List the destinations specified within a distribution list file as
           well as the file itself in any distribution list included with the
           message.  For REMIND, /LIST implies /EXPAND.
  /HEADER  Include the header line in messages mailed to local files.  See
           message formats in a previous section.  Unlike most switches, the
           default for this switch is on.
  /E       Include an E directory if creating a new message file.  The default
           for this switch, like that for /HEADER, is on.  See the section
           above on message file formats.
  /DATE    (REMIND, PLAN, EVENT, and BATCH only) This switch is used in the
           form /DATE=<date> and sets either (1) the delivery date for a
           reminder, (2) the expiration date for a plan, (3) the occurrence
           date of an event, or (4) the execution date for a batched command
           sequence.  Reminders, events, and batch executions can also be
           given a time (see /TIME switch below), but any date must be
           specified before any time is.  For the <date> formats accepted, see
           the section below on dates and times.
  /TIME    (REMIND, EVENT, and BATCH only) This switch is used in the form
           /TIME=<time> and sets either (1) the delivery time for a reminder,
           (2) the occurrence time of an event, or (3) the execution time for
           a batched command sequence.  Reminders and batched executions can
           also be given a date, and events must be given a date; see the
           /DATE switch above.  If /DATE and /TIME are both used, /DATE must
           come first.  For the <time> formats accepted, see the section below
           on dates and times.
  /COUNT   (REMIND and BATCH only) This switch is used in the form
           /COUNT=<number> and sets the expiration count for a reminder or a
           batched command sequence.  This count is only relevant if the
           command contains a wildcard date.  See the section below on dates
           and times.
  /EXPAND  (REMIND only) This switch applies only to destinations of the form
           @file.  It causes such a distribution list file to be expanded now
           instead of when the reminder is actually sent.  This means that
           there will actually be a separately stored reminder for each
           destination now contained in the distribution list file rather than
           one reminder that actually references the file when the reminder is
           being sent.  This switch applies only to the file itself (not to
           any @file destinations within the file), unless the switch is given
           globally or file-globally, in which case it propagates downward.
           /-EXPAND implies /-LIST.
  /ARPA    This switch may only be used with a destination of the form @file
           or as a file-global switch in such a distribution list file.  It
           changes the syntax of the destination processor so that the
           character "@" precedes a network host name instead of a
           distribution list file name, and all SIXBIT characters except
           space, comma, colon, quote ("), and at-sign (@) are allowed in
           names without using quotes.  A name ending with a colon
           (distribution list name for SNDMSG) is ignored.  The switch is
           intended for files from systems like TENEX with less sophisticated
           mail programs.
  /-OUTGO  This switch is meaningful only in the negative sense.  It prevents
           mailing the message to your OUTGO.MSG file.
  /REPLYTO This switch causes a "Reply-To" field to be inserted in the message
           header.  Mail programs at many hosts, as well as the REPLY macro in
           EINIT.CMD[1,3], recognize this field as overriding the sender's
           name when determining where to send a reply.  The form of the
           switch is /REPLYTO"arbitrary text".  If the arbitrary text includes
           quotes, use the alternate form /REPLYTO↓arbitrary text with
           quotes↓; if the text is just a different WAITS user address, you
           can use /REPLYTO=name.
  /IMPTYP  This switch causes MAIL to type out all network control commands
           that are sent or received in the process of sending the mail.  This
           applies only to network mail that is being attempted immediately
           (not to queued mail) and is for the benefit of wizards attempting
           to debug network mail.
  /XHEADB  This switch is for use by wizards debugging network mail headers.
           It causes all destinations to really mean "." (the sender) even
           though the message header will be generated normally and will
           indicate all the recipients as named.
  /NETDBG  This switch is for use by wizards debugging network mail.  It
           causes mail sent to someone at the sender's own WAITS host to be
           sent through the network if the host is named explicitly.  Normally
           local mail is not sent through the network.
                             A4.7  Dates and Times


The commands REMIND, PLAN, EVENT, BATCH, and LATER all accept dates and (except
for PLAN) times.  The date and/or time given for one of these commands specifies
when a particular thing should happen: REMIND causes a reminder message to be
mailed and/or sent to one or more users at a given instant; PLAN creates a plan
file for the user giving the command and specifies the date on which the plan
file should automatically be deleted; EVENT puts out a system message announcing
an event of general interest which will take place at the specified time and
date; BATCH causes a sequence of commands to be executed at the specified time
and date; and LATER causes a given program to be run at the specified time and
date.  For all of these commands except LATER, there are two ways to provide the
date and time information.

The less confusing manner of giving dates and times is to use one or both of the
switches /DATE=date and /TIME=time after the command name (if both are used,
/DATE must precede /TIME).  These switches may only occur immediately after the
command name.  (Switches are not permitted with the LATER command, which takes a
fixed one-line format that will be explained on page 140.  Dates and times in
the LATER command must use the non-switch format.)  If neither switch is used in
a command that needs a date or time, then a date and/or a time will be expected
after the destination list (which is only present for REMIND) and before the
message text.

Dates may be given in any of the following formats (whether in the switch form
or not):

          4/28/75         28-APR-75       APR 28, 75
          4/28/1975       28-APR-1975     APR 28, 1975
          4/28            28-APR          APR 28
          4/28/*          28-APR-*        APR 28, *
          */28/*          28-*-*          +3
          WEDNESDAY       WED             W
          WEDNESDAY*      WED*            W*

(Visitors from other countries please note that the slash format is
month/day/year, and not day/month/year!)

If a specific month and day are given but no year, the current year will be used
unless the date has already passed, in which case next year is used.  Today's
date is considered as already having passed except in the EVENT command.  Months
and days of the week may be indicated by as many letters as are required to
identify the name uniquely.  For days of the week, the one-letter abbreviations
M T W R F S D are provided.  The format "+3" is used to indicate a date of 3
days from today.  The asterisks represent wildcard dates which are explained in
the section below on wildcard dates and expiration counts.

Times may be given in any of the following formats (whether in the switch form
or not):

          1423            223pm           223p            02:23p
          14:23           2:23PM          2:23P           02:23PM
          0223            223am           223a            223
          02:23           2:23AM          2:23A           2:23
          2               2AM             2PM             14
          +2:23           +2:             +:23            +14:
          2*              2AM*            2:23*           2A*

If an explicit AM or PM is given, it must follow the time number with no
intervening spaces!  This requirement is necessary to distinguish the AM or PM
from the possible beginning of the message text or of a destination name.  Times
with three or four digits and no colon normally imply AM if less than 1200 and
PM otherwise (the allowable range is 0000-2359); it is possible to specify AM or
PM explicitly, however, if the number is in the range 0100-1259.  If no explicit
date is given in the command, times with one or two digits, or with a colon, and
in the 1:00-12:59 range without an explicit AM or PM, will represent the nearest
such 12-hour time which has not yet passed (which might be this morning, this
afternoon, or tomorrow morning).  If a date is given as well as a time, times in
the 0:00-11:59 range will normally be considered AM and 12:00-23:59 will be
considered PM as for the four-digit times.  Note: A time of 12:00am is midnight,
and 12:00pm is noon; the mnemonic is that 12:00 is a minute before 12:01.

If a time is given but no date, today's date is used unless the given time has
already passed, in which case tomorrow's date is used.  If a date is given but
no time, the time used is midnight at the beginning of the given date.

The relative time format (e.g., +2:23) specifies the length of time before the
command is to be executed (in this example, 2 hours and 23 minutes); this format
may only be used if no date is given and, except in the switch form, must
contain a colon so that +2 days can be distinguished from +2: hours.

A time followed by an asterisk represents the given time and a wildcard date;
see the section below on wildcard dates and expiration counts.
                   A4.8  Wildcard Dates and Expiration Counts


As demonstrated in the example dates and times above, an asterisk (*) can be
used as a wildcard in place of the month or year, or following a day of the week
or a time.  Such dates and times cause the command to be executed repeatedly
until exhaustion of the expiration count, which is explained below.  (Wildcard
dates are not permitted in the PLAN and EVENT commands.)  An asterisk used in
place of the month will cause the command to be repeated once every month, and
an asterisk used in place of the year will cause yearly repetition; asterisks
used for both the month and the year will cause monthly repetition every year on
the given day of the month.  An asterisk following a day of the week will cause
weekly repetition on the given day of the week.  An asterisk following a time
will cause daily repetition at the given time; in this format no date can be
given.

If * is used for the month but not for the year, the command will expire at the
end of the specfied year, or the current calendar year if none is specified.

When a wildcard date is used, the command is repeated until exhaustion of the
expiration count.  The expiration count can be set explicitly by using the
/COUNT=n switch (global only) or by following a non-switch-format date/time with
#n, where n is a decimal number.  If no expiration count is given, the default
of 50 is used.  A count of 0 or ∞ will prevent the command from expiring unless
it is explicitly cancelled by the user.
                       A4.9  Mail to Other Network Hosts


Mail can be sent to users of other computer systems connected to the ARPA
network or the SUNet (Ethernet).  To send network mail, you must tell the MAIL
program the name of the recipient, as understood by the other host, and the name
of the host.  Each host has an official name, a string of letters, digits, and
hyphens.  For example, our host name is SU-AI.  Hosts may also have unofficial
nicknames.  Either the official name or a nickname can be used to identify a
host; you need only type enough characters to identify the host uniquely.  For
example, we have the nickname SAIL which can (as of this writing) be abbreviated
SAI.  Each host also has a number; you can type a decimal host number instead of
a name.  (Ethernet host-name scanning has not yet been put into final form as
this edition goes to press.  Therefore, not all reasonable names of Ethernet
hosts may be recognized by MAIL.)  The format for a network destination is

        name % host

where "name" is the recipient's name at the host and "host" is the host name or
number.  The recipient name can contain upper and lower case letters, digits,
dots, and hyphens; if any other characters are required the name must be
enclosed in quotation marks ("...") or downarrows (↓...↓).  The name must also
be quoted if it does not start with a letter.  Some hosts may consider the case
of letters significant in their user names.

To send a message to several users at the same host, it is possible to specify a
sticky host with a pseudo-destination of the form

        % host

Thus, the command

        MAIL FEINLER%BBNB,%AI KLH,TK,MINSKY,BH%SAIL,PAPERT

will mail the message to these recipients:

        FEINLER at host BBN-TENEXB
        KLH at host MIT-AI
        TK at host MIT-AI
        MINSKY at host MIT-AI
        BH at host SU-AI
        PAPERT at host MIT-AI

Of course, mail to SU-AI is not actually sent via the network!  The sticky host
specifier "%AI" was not followed by a comma in the example above; the comma is
optional following sticky hosts since the use of a sticky host implies that at
least one destination will follow.

Not all network hosts are servers; that is, some hosts can originate network
connections but do not accept connections originated from another host.  MAIL
will try to deliver mail to any given host, whether it is known as a server or
not; however, if a host doesn't have a mail server, then mail addressed there
will not get through but will eventually be returned to the sender.

If MAIL does not recognize a host name that you think it should, consult a
system programmer.  MAIL will always accept hosts specified by number.

The process of delivering network mail is rather slow; therefore, the default
action is to queue the message for delivery by the remind phantom job rather
than to mail it directly from your own job.  The switch /-QUEUE will cause
immediate mailing.  This switch is automatically assumed for very long messages
(more than about 20,000 characters).  A network SEND command is also done
directly from your own job.  Note: normally the first attempt to deliver the
mail will be made immediately by the remind phantom, but if the system is very
crowded there may be no job slots available for the phantom until later.

If you specify /-QUEUE, MAIL will notify you of the progress of your message.
Network mail may not be delivered successfully on the first try, because the
other host or the network communications equipment may be down.  Therefore, the
result of a network mail attempt from your own job is reported with one of three
messages:

        USER at HOST -- ok
        USER at HOST -- refused
        USER at HOST -- queued

The first message means that the mail was sent and acknowledged by the other
host.  The second means that the network connection was established but the
other host rejected the mail, for example, because it did not recognize the
recipient as a user of that system.  Usually the other host will send back a
message explaining why the mail was refused, which the MAIL program types out.
The third message means that the network connection could not be made or was
interrupted.  The message is queued like a reminder and is automatically retried
at three-hour intervals for three days.  (The first repeat attempt is made 15
minutes after the original failure.)  You can use the RETRY command (see the
section on the RETRY command) to retry your queued mail manually.  You will be
notified via MAIL and SEND of an unfavorable disposition of queued mail; the
possibilities are

        Mail to USER at HOST -- ok
        Mail to USER at HOST -- refused
        Mail to USER at HOST -- expired

The last of these means that the three-day limit ran out without a successful
connection.  You will get the "ok" message only if the remote host sends back a
nonstandard reply message; normally you should simply assume that the message
will be delivered unless you are notfied otherwise.  You can use the CANCEL
command (page 145) to see if a message is still in the queue, or to delete it if
you no longer want it sent.  If the message is not sent successfully, the
notification you receive will contain the text of your message, so you can
direct it elsewhere if necessary.

The header format for network mail is different from that used for local mail.
The section of this document on message formats explains the network header.  In
particular, the distribution list (list of recipients of the message) is by
default included in network mail but not local mail.  The /NODIST switch will
eliminate the list from network mail.

If you often communicate with users at other hosts, you may want to send mail to
a group of people listed in a file which was prepared elsewhere.  To make this
easier, the switch /ARPA applied to a distribution-file destination causes the
file to be scanned using the syntax of the SNDMSG program on TENEX systems.
Specifically:

    The character "@" is used instead of "%" to indicate network host names.

    Any character may be used in a recipient name except space, carriage
    return, linefeed, tab, quote, colon, comma, and at-sign without quoting
    the name.  Note in particular that semicolon is a valid recipient name
    character.

    A recipient name ending with colon (distribution list name) is ignored
    completely.

There is a network protocol for implementing the SEND command to a remote host.
However, most hosts do not implement it.  Most notably, it works to WAITS
systems, the ITS systems at MIT, and the TENEX systems at SRI.  Certain other
hosts also accept this protocol, but not very many.  The MAIL program will
attempt it to any host, but it generally won't work except to the
above-mentioned hosts.  When a SEND fails to a remote host for any reason, the
message is never queued for later delivery--its delivery is simply aborted.

A message sent to a remote destination by SEND or SEND/NOMAIL, but not by
SEND/YESMAIL or SEND/MAIL, will have a special short header instead of the
normal network message header.  The short header looks like this:

ME at SU-AI 1/6/82 17:35:16

(Note that the switches can apply to a single destination, rather than globally
as shown here.)  If you use /YESMAIL or /MAIL, and the remote host does not
recognize the network SEND protocol, MAIL will try again using the standard MAIL
protocol.
                            A4.10  The MAIL Command


The MAIL command is used to send a message to one or more users, but can also be
used to write a message in an arbitrary disk file.  This command takes a list of
destinations which determines where the message is to go.  See the section above
on destination lists.

Mail sent to a user will be seen when he next reads his message file, but a note
saying that mail has arrived is typed out on the terminal of each destination
user who is logged in at the time the mail is delivered.  You can edit your
message file with E by giving the monitor command ETV ∂ (or ETV \MAIL).

A notice can be mailed to the system message file NOTICE.TXT[2,2] via the MAIL *
command.  Users see the system messages when they log in.  Since a system
message may only be relevant for a short time, an expiration date can be
specified for such a notice.  To do this, use the /DATE=<date> switch; the
message will be deleted at the midnight that begins the given date, and
therefore the notice will last be seen on the previous day.  The date must not
be wild; that is, it cannot contain the asterisk (*) wildcard specifier.  System
messages specified without an expiration date will be deleted after 14 days.
(The expiration facility is implemented by including the expiration date as its
octal DAYCNT number in the message header.  A program run every night deletes
expired notices.)  See also the EVENT command for putting notices about events
in the system message file.

To put a message into the system bulletin board file BBOARD.TXT[2,2], use the
command MAIL BBOARD.  The recommended way of reading this file is with CKSUM
(see page 146) and E.

Sometimes mail cannot be delivered to a given user right away.  In this case,
the mail system queues the message for later delivery.  Attempts to deliver
queued local mail will be made every ten minutes for four hours, with the first
such attempt occurring about 2 minutes after the original failure.  Queued
network mail is retried every 3 hours for three days, starting 15 minutes after
the original failure.  After 24 delivery failures, the sender is notified via
the mail system of the eventual outcome of his mail attempt.  Mail will have to
be queued if the destination user is located at another network host and that
host is down, or if the destination user is local but is currently reading his
mail file.  There is a limit on the size of a message to be queued (currently
about 40,000 characters).  Queued mail is handled automatically by the mail
system and the sender need never take any further action.  However, the sender
can unqueue any of his outgoing messages that have been queued; the monitor
command CANCEL allows selective deletion of these queued mail requests (see page
145).  Also, the sender can cause MAIL to retry sending his outgoing queued mail
immediately by giving the RETRY command (see page 139).

Mail for local users is normally kept in files in the [2,2] directory.  These
files must have 000 protection so that anyone can write into them, since the
MAIL command is not specially privileged.  However, it is possible to create a
mail file which is protected against other users.  If there is a file called
MSG.MSG[1,PRG] then mail to PRG will go to that file instead of the usual [2,2]
file; if the file is protected, so that the MAIL command cannot write the
message, then the request will be queued for delivery by the remind phantom,
which does have the necessary privileges.  The phantom will use its privilege to
override file protection only for a file named MSG.MSG, so you cannot queue mail
to an arbitrary protected file.

The LOGOUT program will type and delete a file in your directory called
LOGOUT.MSG if you have no other jobs logged in.  This mechanism can be used to
send yourself a reminder to be seen when you leave:

MAIL #LOGOUT Get some ice cream on the way home tonight.

The MAIL program provides for mail forwarding, primarily intended for users
whose primary mailbox is on another network host.  The feature also allows for
"pseudo-mailboxes" which are forwarded to one or more real destinations.

First we consider the forwarding of mail for a programmer name.  As an example,
programmer name GFF forwards to Geoff%SRI-CSL.

MAIL GFF This is a test.
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C

In this case, the forwarding entry has been set up to notify the user that
forwarding is taking place.  This is optional; usually it will be done for real
programmers and not for pseudo-mailboxes.  The use of a user's human name rather
than programmer name works with forwarding:

MAIL GOODFELLOW message text
GFF is the ID for user Geoff Goodfellow
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C

Forwarding happens only for MAIL, not SEND!

SEND GFF Test message
Exit
↑C

But if the SEND command causes mailing, the mail is forwarded:

SEND GFF Test message
GFF not logged in, type Y to mail. Y
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C

(A SEND to a not-logged-in user which turns to MAIL to a user whose mail is
forwarded to the network, will try a network SEND and then network MAIL if
necessary.)

Another possible use for forwarding is to affect the processing of one's mail.
For example, if user ABC always logs in remotely and reads his mail with RCV
rather than E, ABC might be forwarded to ABC/-E to tell MAIL not to make an E
directory when creating a new message file for that user.  This brings up the
question of switches applied to forwardees.  Most such switches are applied to
all of the corresponding real destinations, e.g., MAIL GFF/DIST will be treated
like MAIL Geoff%SRI-CSL/DIST.  Also, for forwardees only, /-DIST implies
/NODIST, since the mailer may not know whether the actual recipient is local (in
which case /-DIST is applicable) or at a remote host (/NODIST).  A few switches,
which affect the format of local files, are ignored for forwardees, e.g.,
MAIL GFF/-E ignores the switch, because the mailer doesn't really know where the
mail is going.  These switches are rarely used anyway; don't worry about it.

It is possible for a person to be known to the system only for the purpose of
mail forwarding, i.e., to have a forwarding entry but no file directories.  Such
a person is a mail-only destination; suppose that GIO is forwarded to
WIEDERHOLD%SUMEX and has no file directories on WAITS:

SEND GIO Hello.
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations: 
Exit
↑C

(In this case, nothing will happen even if you type Y because the only
destination is a mail-only one, and mailing was not specified.)

MAIL GIO Hello
Forwarding GIO to Wiederhold%SUMEX
Exit
↑C

MAIL to this destination works straightforwardly, to coin a phrase.  There are
some other possibilities:

SEND/MAIL GIO text
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations: Y
Forwarding GIO to Wiederhold%SUMEX
Exit
↑C

Since the command asks for both SEND and MAIL (/MAIL), it does have something to
do despite nobody to send to.  But you are given the chance to abort, since
saying SEND/MAIL might mean that you expected it to be able to send also.  The
command SEND/YESMAIL does not act like SEND/MAIL, but like SEND:

SEND/Y GIO text of message
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations: Y
Exit
↑C

The pseudo-mailbox capability is useful mainly for incoming network mail, since
local users can easily use the simpler @FILE distribution list facility.  For
example, there is a large mailing list called HEADER-PEOPLE at MIT which
includes several SU-AI users.  When anything is mailed to that list, MIT must
set up several separate network connections to SU-AI, one for each recipient,
each of which starts up a separate MAIL job.  This can be made more efficient by
creating a pseudo-mailbox SAIL-HEADER-PEOPLE here, containing all the SU-AI
people in HEADER-PEOPLE, and replacing them with one entry for this new mailbox.
Pseudo-mailboxes are always mail-only destinations, i.e.,
SEND SAIL-HEADER-PEOPLE won't work.

The pseudo-mailbox name must be entered completely; there is no partial name
recognition as for human users.  Case of letters is ignored, however.

Incoming network mail will be accepted for any destination listed in the
forwarding file; the remote sender will be notified about the forwarding if a
local mailer would be.  The network SEND protocol does NOT accept forwarding,
even in the case of SEND/MAIL (XMAS command in FTP).  For the network SEND
protocol, it is just as if forwarding didn't exist.

Reminders may not be sent to pseudo-mailboxes.  If a reminder is sent to a
programmer name for which forwarding is in effect, the programmer name is given
to the REMIND phantom as is; when the reminder is actually delivered, the
message will be sent to the actual programmer name and mailed to the specified
forwarding addresses, as in the SEND/MAIL command.

If you want to establish forwarding for yourself, or set up a pseudo-mailbox,
use the command MAIL FORWARD with a message describing what you want.
                            A4.11  The SEND Command


The SEND command is used to have a message typed out on one or more terminals.
This is usually for the purpose of sending a brief message to the terminals of
selected users so that they will see it immediately.  The message is preceded by
a header telling who sent the message and when; see the section above on message
formats.  This command takes a list of destinations which determines where the
message is to go.  See the section above on destination lists.

A message can be sent to all logged in users via the SEND * command.  The
message will be typed out on the terminal of every logged in user.  This command
will remind you of the alternative forms, ARPA* and LOCAL* (explained below), in
case you didn't really want to send the message to everybody.  If you do want to
send it to everybody, you can say SEND ** (two stars instead of one), in which
case the reminder about ARPA* and LOCAL* will be omitted.

To send only to people logged in locally at Data Disc and III terminals, you can
use the command SEND LOCAL*.

Also, the command SEND ARPA* will send a message to all users who are logged in
on WAITS via a network.

The SEND command also accepts decimal job numbers as destinations, or terminal
names in the form TTYn.

A user can prevent messages from being sent to his terminal by using the TTY GAG
command.  In this case, the person trying to send the message will be notified.
Note that a user may be logged in at more than one terminal, and may have
received the message even if one terminal was gagged; in this case, a reassuring
message is typed to let you know that the recipient got your message on at least
one terminal.  If the message is not successfully sent to the recipient at any
terminal, then you will be offered the chance to have the message MAILed
instead.  The /WHERE switch will notify the sender of all recipient terminals,
successful as well as unsuccessful.  A SEND can fail even if the terminal is not
gagged, e.g., if it is holding output.  This also causes notification.  You will
also be notified, even if the message is sent, if the recipient terminal is a
display whose page printer geometry is nonstandard and might cause the message
to be lost because the page printer area is too small to hold it.  However, if
the currently selected piece of paper is nonstandard, but piece of paper number
0 is standard in its geometry, the warning will not be given, since messages are
sent to the display's piece of paper 0 as well as the currently selected piece
of paper.

There is a network protocol for implementing the SEND command to a remote host.
However, most hosts do not implement it.  Most notably, it works to WAITS
systems, the ITS systems at MIT, and the TENEX systems at SRI.  Certain other
hosts also accept this protocol, but not very many.  The MAIL program will
attempt it to any host, but it generally won't work except to the
above-mentioned hosts.  When a SEND fails to a remote host for any reason, the
message is never queued for later delivery--its delivery is simply aborted.
                           A4.12  The REMIND Command


The REMIND command allows the delivery of a message to be delayed until a
particular date and time, and/or to be repeated periodically.  This command
requires a date and/or time, which are interpreted as explained above in the
section on dates and times.

Reminders are often sent to oneself rather than to another user.  The character
"." (period) as a destination means your own login programmer name.  Also, if
the first thing after the REMIND command (and global switches) is a digit, it is
taken as the beginning of a date or time, and your programmer name will be used
as an implicit destination:

REMIND 21-JUN KINKS CONCERT TONIGHT

Reminders are normally both mailed and sent at the specified date and time.
However, either of the switches /MAIL and /SEND can be used with the REMIND
command to cause the reminder to be only mailed or only sent.  Nevertheless, if
a repeated reminder is being sent for the last time because its expiration count
has run out, it is always mailed even if /SEND was used in the command.

When a repeated reminder's expiration count runs out, a warning message to that
effect is included in the text of the last reminder.

To selectively delete reminder requests, use the monitor command CANCEL (see
page 145).
                            A4.13  The GRIPE Command


Complaints, compliments, or criticisms about any aspects of the system can be
entered by use of the GRIPE command.  The MAIL system tries to send gripes
directly to the correct person for handling the particular gripe.  If there is
no such person for a specific gripe, the gripe will go into the miscellaneous
gripes file, which is regularly read by various people.  The format of the GRIPE
command is similar to that of the MAIL command, except that in place of the one
or more mail destinations, the user gives one or more gripe topics (separated by
commas) which determine where the message will be sent.  Each gripe topic should
be a single word.  Note that a gripe topic is not the same as, and does not
replace, the subject line which may also be given.  As in the MAIL command, the
entire GRIPE command can be put on one line, e.g.,

GRIPE MAIL,E How come the αXMAIL command in E doesn't do such and such?

If you aren't sure what topic to use, you can say  GRIPE *  which will send the
message to the general gripes file.  Also, if any topic you give is not
recognized as a gripe topic, your gripe will go to the general file anyway.  The
command  GRIPE ?  will list the known gripe topics.  To send a gripe that is
already written up in a file, you can say GRIPE topic @PPSAV.TMP<return>.  The
command GRIPE with no arguments enters a hand-holding dialog comparable to that
for a MAIL command with no arguments.  The general gripes file can be examined
and edited with the E editor by giving the monitor command ETV \GRIPES
(currently abbreviatable as ET\G).
                            A4.14  The EVENT Command


Messages of interest to everyone can be sent to the system message file by use
of the command MAIL *.  However, for a message about an event occurring on a
particular day, a more useful facility is provided by the EVENT command, which,
like MAIL *, enters the message in the system message file NOTICE.TXT[2,2], but
which does so several times: first on the day the EVENT command is given, then
three days before the event, then again on the day before the event, and finally
on the day of the event.  The EVENT command takes an explicit date and optional
time in the formats explained in the section on dates and times.  EVENT will
then list the message given prefixed by a special line of the form:

        Event of DAY DD-MON-YY at HH:MMxm

where DAY is the day of the week the event will occur on, DD-MON-YY is the day,
month, and year of the event's date, HH:MM is the event's time, if given, and xm
is either "am" or "pm" for the time.  Thus, the date and time need not be
included in the message text itself.

Three days before the event, the day before the event, and again on the day of
the event, the event notice will be deleted and re-entered in the notice file so
that users will see it again on those days.  It is finally deleted at the
midnight that ends the day of the event.  If the event is on a Monday, the
notice is re-entered on the preceding Friday, Saturday, Sunday, and the Monday
of the event.  If the event is on a Sunday, the notice is re-entered on Friday,
Saturday, and the Sunday of the event.  Events on other days are re-entered
three days before the event, the day before the event, and the day of the event.
(The re-entering of upcoming events is implemented by including more than one
expiration date in DAYCNT format in the message header.)

If you want to change the text in an event notice, you can edit the system
messages file with ETV \NOTICE or RCV * and then update the message text or the
time of the event.  However, if the date of the event is wrong, you should
delete the notice (with the editor) and make a new one (with EVENT) because the
octal dates in the header determine what days the message will be seen, and the
header should not be edited.
                            A4.15  The PLAN Command


The PLAN command is used to create or delete a file describing your whereabouts,
office schedule, or whatever, to be read by users who give the FINGER command to
find you when you are not logged in.  The PLAN command writes a plan file called
"   PRG".PLN[2,2], where PRG is your programmer name.  Any previous plan file is
replaced with a new one containing only the new message you give.  If you enter
a null plan, your plan file is deleted.  The plan applies to your login
programmer name.

The PLAN command requires an expiration date (but no time) as explained in the
section on dates and times.  Your plan file will be deleted at the midnight that
begins the expiration date.  (Plan file deletion is implemented by entering a
LATER request (see page 140) to run the program DELPLN, which will delete your
plan file.  You can selectively delete this LATER request by using the monitor
command CANCEL--see page 145).

Your plan file can be referenced with the COPY or E programs by using the \PLN
filehack.  For instance, the monitor command TYPE \PLN will type out your plan
file, and DELETE \PLN will delete it.  Also, the COPY/E message-file specifier,
partial-sign (∂), can be used to reference your own or someone else's plan file:
TYPE ∂.PLN will type out your own plan file and TYPE ∂ME.PLN will type out the
plan file belonging to programmer name ME.
                            A4.16  The NAME Command


The NAME command is used to find out, for a given programmer name, (1) the
user's real name, (2) the forwarding address (if any) for mail to that user, and
(3) if the given user has no directories.  Thus one thing this command is good
for is telling if a particular programmer name is complete unused, for instance,
when deciding on a programmer name for a new user.
                            A4.17  The RETRY Command


The RETRY command is used to retry all queued mail immediately.  It takes no
arguments at all in the command line.  RETRY searches the remind queue for
queued mail (not reminders) sent by or to your login programmer name and tries
to send the mail.  (This will be done automatically without using the command,
but the command is provided for impatient mailers.)  Please do not type <call>
or ↑C after giving this command, or you may lose a queued message.

To retry only incoming messages (to you), use RETRY/IN.  To retry only outgoing
messages (from you), use RETRY/OUT.
                            A4.18  The LATER Command


The REMIND command, in essence, allows the execution of a MAIL or SEND command
to be delayed to a specified time.  The LATER command generalizes this delayed
execution to allow an arbitrary program (dump file) to be run at a later time.
The command format is:

        LATER dumpfile core datetime count

The LATER command does not accept switches and requires all of its arguments to
be on the command line.  If the proper syntax is not followed, a message is
typed explaining the proper syntax and nothing else is done.

The defaults for the program file to be executed are device DSK, extension .DMP,
and your alias PPN.  If a device is explicitly specified, it must be DSK or SYS.
No check is made when the command is given to ensure that the specified file
exists or is a valid program dump file.

The optional core argument can be used to control the core size and starting
address used to run the program.  If this argument is not used, the program will
be run in as much core as is needed to fit it, and will be started at its normal
starting address.  The core argument can be in any of these formats:

   <nP>   <+m>   <-m>   <nP,+m>   <nP,-m>   <+m,nP>   <-m,nP>

The angle brackets are actually to be typed.  The nP subargument specifies the
number of 512-word pages of core to be assigned to the program; n is a decimal
integer.  The +m or -m subargument is a starting address offset, that is, m will
be added to or subtracted from the program's normal start address.  Note: m is
an octal integer.  The core size may also be given in 1024-word blocks by saying
nK instead of nP.  One K is equal to two pages.

The date and/or time must be given in the non-switch format as explained in the
section on dates and times.  If both a date and a time are given, the date must
appear first.

The optional count argument specifies the number of times the program is to be
run and is ignored unless a wildcard date is used.  If no explicit count is
given when a wildcard date is used, the default count of 50 will be assumed.
The format for the count field in the LATER command is

   #n

where n is a decimal integer.  A count of #0 or #∞ will cause the count never to
run out.

When a program specified by a LATER command is actually run, it will have your
login PPN as its login and alias PPNs.  The only privilege it will have will be
the Local User Privilege (LUP).  Also, it is run as a phantom job--if it is
stopped because of an error, the job is killed.

Certain accumulators (ACs) are set up when the program is started to communicate
information from the remind phantom to your program:

    AC   Contents

    1    filename of program dump file (same as job's name)
    2    extension of program dump file
    3    PPN of program dump file--[1,3] if device SYS was specified
    4    -1 if this LATER request will not be run again, else 0

The program can only be run if a job slot is available at the time for which it
is scheduled.  If the remind phantom is unable to run the program because no job
slots are available, it does not try again later (unless, of course, the date
and time specify repetition).  If the system is so crowded that job slots are in
short supply, users who are present in the flesh get priority over LATER
requests.  This is rarely a problem except for weekday afternoons.  (If there is
no job slot for the remind phantom itself, it will try to run your request once,
as soon as it is run itself.)

LATER requests can be selectively deleted by using the monitor command CANCEL
(see page 145).
                            A4.19  The BATCH Command


Sometimes you may want to delay the execution of one or more monitor commands.
To allow this, the BATCH command accepts a command string and enters a request
to run a program which enters the commands through a pseudo-teletype (PTY).  The
message given with the BATCH command is taken to be the command or sequence of
commands which is to be typed to the PTY.  The only switches permitted are
/DATE, /TIME, /COUNT, /TLIMIT, /NOW, and /DO.  The /COUNT switch specifies the
number of times the command sequence is to be executed and is ignored unless
there is a wildcard date.  The /TLIMIT switch (the name /LIMIT is equivlent) is
used to specify the number of CPU-minutes the batch job will be allowed to run.
The /NOW switch causes BATCH to execute the command sequence as soon as you have
finished entering it instead of later; in this case no date or time must be
given.  The /DO switch causes certain character conversion to be done when
entering the commands, as in the DO program and as explained below.

        Character       Effect in /DO mode

        RETURN          ignored
        LINE            ignored
        ↔               translated to RETURN followed by LINE
        ↓               translated to LINE
        ≠               translated to ALT
        λ               translated to deferred CALL (one ↑C)
        VT              adds CONTROL bit to following character
        α               adds CONTROL bit to following character
        FORM            adds META bit to following character
        β               adds META bit to following character
        ⊗               translated to ESC
        ⊗-              translated to BREAK
        ≡               quote the following character (no translation)
        !               invert state checking for terminal input wait

Note that the characters | and ? and ! are not treated the same by DO and
BATCH/DO.  The first two of these (|?) being special only in DO, and the third
(!) being special only in BATCH/DO.  (Other different interpretations may also
exist between the two programs.)

The BATCH/DO special character exclamation point (!) inverts a flag saying
whether or not to wait for the PTY job to be ready for input before typing in
commands.  Normally, BATCH will not send characters from your batch command file
to the PTY job until that job is waiting for terminal input or for a monitor
command.  That way, the typing of commands is synchronized with the running of
the program.  However, this synchronization does not work for a few programs,
most notably FTP, which do not read terminal input in the normal way and
therefore are never in terminal input wait.  Here is a sample command file using
the new feature:

        FTP AI↔!
        GET FOO.BAR←MUMBLE;FOO BAR↔
        BYE↔
        !SEND . FTP DONE↔

The GET and BYE commands are sent to the PTY job immediately after the first
exclamation point is seen by BATCH, but the SEND monitor command is not sent to
the PTY until FTP exits and the PTY job is waiting for a monitor command.

Note 1: In the above example, the first ! must be on the first line, right after
the ↔, because the actual carriage return ending that line would (even though
not actually sent to the PTY) cause a delay after the FTP command otherwise.

Note 2: If you put enough characters between exclamations points to fill up the
PTY input buffer, no more characters will be sent until there is room.  If the
PTY job never reads any of the characters, then both jobs will wait forever.

Note 3: If you actually want to send a ! to the PTY, you must use ≡!  in the
command file.  (Note that all of this applies only to /DO mode.)

If the /NOW switch is not used in the BATCH command, BATCH writes a file on your
alias disk area called BATn.DMP (n is a number chosen to make the name unique)
and enters a LATER request for the running of that program.  The BATn program
types the desired commands into a pseudo-teletype (PTY) when it is run.  The
LATER request starts the BATn program at one more than its normal start address;
if it is started normally (e.g., RUN BATn), it simply types out the commands
stored in it, so you can find out which BATCH program is which if you enter more
than one.  When the BATn program is started by the LATER request, it writes a
file called BATn.LOG on your login disk area with a log of the commands and
typed output.  The BATn.DMP file is deleted when the request is being run for
the last time.

If BATCH/NOW is used, no BATn.DMP file is written.  The MAIL program itself
executes the command sequence through a PTY as soon as you have entered the
whole command sequence.  In this case, the log file is called BATCH.LOG and is
written in your alias directory.

BATCH requests can be deleted selectively by using the monitor command CANCEL
(see page 145).  If you delete a BATCH request with CANCEL, the BATn.DMP file
will not have been deleted; you must delete this file separately.

The BATCH command has a time limit feature, to ameliorate the problem of runaway
batch jobs.  The feature is controlled by the /LIMIT or /TLIMIT switch (the two
names are equivalent) in the form

        /TLIMIT=mins    or  /TLIMIT=hrs:mins

The switch is given with other batch switches, right after the command name.
The form /TLIMIT=∞ may be used for an infinite limit.  The default time limit is
one hour for jobs submitted for later execution, and is infinite for jobs run
immediately with the /NOW switch.  (Presumably the latter case implies that the
user is watching the job run and can interrupt it himself if necessary.)

The limit applies to the job's runtime (CPU time), not realtime.  The BATCH
controller takes clock interrupts every two (real) minutes to check the
controlled job's runtime, so the time limit may in fact be slightly exceeded
before the job is stopped.  If the job runs over its time limit, it is logged
out immediately; the log file will end with a line saying

        ? BATCH: time limit exceeded.

The BATCH command has many deficiencies when considered as a full batch
processing facility.  There is no way to control the commands issued on the
basis of past output, no provision for aborting a command sequence if an error
occurs, no provision for mounting tapes or collecting listings.  The command is
not intended as a real batch processing system, but merely as a convenience for
delaying the execution of simple commands.
                   A4.20  The REENTER Error Recovery Facility


The MAIL program remembers all of its input after execution, and can be made to
repeat the command with or without modifications to the command, switches,
destinations, and message.  To invoke this facility, type REENTER to the
monitor.

To use this feature while typing in the message text, you can type CALL and
REENTER, but any text still in the line editor buffer or the terminal input
buffer when you type CALL will be lost.  Unless the system is very heavily
loaded, the problem of losing text from the terminal input buffer should not
come up, but be sure to type <CR> to activate any text in the line editor before
typing CALL.

Two different modes of REENTER operation are provided.  If the command and
destination list were all typed on one line of input from a display, that line
is loaded into the terminal's line editor and can be edited and re-activated.
In this case, the program forgets all about the previous command and starts from
scratch when the edited command is seen.  The text of a single-line message will
be included in the reloaded line; no message text will be loaded for a
multi-line message, but the old text is remembered and if the new command does
not contain a message or a pointer to a message file, the old text will be
re-used.  Note: the subject line is considered part of the text, and the state
of the /SUBJECT switch may not be changed if the old text is re-used in this
way.

The second mode of repeating a command is used if the destination list was given
on more than one line or from a non-display.  In this case, the command and
destination list are typed and you are asked if you want to keep the old
destinations.  Whether you answer yes or no, the command name and global
switches are loaded into your line editor (displays only) and new destinations
can be added on the command line.  Finally, if no message text appears in the
re-edited command, the old message is used as in the first mode.  (Note: in this
mode, only valid destinations are remembered from the old destination list; in
the first mode what is remembered is the actual string of characters you typed.)

If the old text is re-used, in either mode, before sending the message the MAIL
program asks if the user wants to edit the command or the message text with E.
(Editing with E is allowed whether or not the user is on a display, although of
course it's easier to do from a display.  SOS editing is not available because
SOS does not use the same SNAIL-startup conventions as E.)  In this case, a
MAIL$E.TXT file is written and E is run as in the <CONTROL><META>E case--return
to the MAIL program is done via the <CONTROL>XRUN command.
                            A4.21  Hand-Holding Mode


If a command (other than NAME, LATER or RETRY) is given with no arguments other
than optional global switches, the MAIL program will use an alternate syntax
called hand-holding mode which is more verbose but less confusing to an
inexperienced user.  In this mode, MAIL will prompt separately for each piece of
information appropriate to the given command; the possible prompts include

        "To" destinations
        "CC" destinations
        Date and time
        Expiration count
        Subject
        Message text

One possibly important difference between this and the normal syntax is that the
subject line is always entered separately from the body of the message, even if
the latter comes from a file.

Each prompt may be answered by a line containing just the character "?" to see a
message explaining the format of the required information for that prompt.

A REENTER command following the use of this format will be treated the same as
one following a multi-line destination list in the normal format.
                 A4.22  Interfacing to MAIL from Other Programs


The MAIL program can be run from another program using the SWAP UUO.  A special
facility is provided for providing MAIL with the required arguments via the ACs
which are preserved by the SWAP UUO.  To do this, start SYS:MAIL.DMP at one less
than its normal starting address.  The message text (including subject line, if
desired) must first be written in a disk file, or a TMPCOR file if the MAIL
program is to be run in the same job as the swapping program.  MAIL will, if
desired, SWAP back to the originating program (or any other program).  The ACs
should be set up this way:

0-5 SWAP UUO arguments for return after MAIL if desired:
         0 device
         1 filename
         2 ext,,mode bits (see UUO manual)
         3 core,,starting address increment
         4 file PPN
         5 login PPN if starting new job
6-16 MAIL arguments:
         6 destination PPN or file (see below)
         7 file extension if required
        10 file PPN if required
        11 message text file name
        12 message text file extension
        13 unused
        14 message text file PPN
        15 date and time for REMIND (see below)
        16 flags (see below)
17 is the SWAP AC and is not preserved in return after MAIL.

The flags in 16 are:

        400000,,0   not used
        200000,,0   /-E
        100000,,0   /NODIST for network mail
         40000,,0   /LIST
         20000,,0   /SEND
         10000,,0   /-HEADER
          4000,,0   /-QUEUE
          2000,,0   /APPEND
          1000,,0   /DIST for local mail
           400,,0   /WHERE
           200,,0   /SUBJECT
           100,,0   /MAIL
            40,,0   /YESMAIL
            20,,0   /NOMAIL
            10,,0   /EXPAND
             4,,0   command is REMIND
             2,,0   command is MAIL
             1,,0   command is SEND
           770000   not used
             4000   /-OUTGO
             2000   read destinations from named file (ACs 6-10)
             1000   return via SWAP when done
              400   text input is from TMPCOR file
              200   delete input text file when done
              100   send to job (binary number in AC 6)
               40   send to TTY (SIXBIT name in AC 6)
               20   destination is * or ARPA* (AC 6 ignored)
               10   mail to explicitly named file (ACs 6-10)
                4   don't use this bit (/CC)
                2   /ARPA (2000 bit must also be on)
                1   if SEND, send to ARPA* (20 bit must also be on)
                    if MAIL, delete old contents of file
                    (for PLAN, see below)

Nothing is guaranteed about the results of setting inconsistent or irrelevant
combinations of flags, e.g., /EXPAND for a command other than REMIND.  Note that
the /MAIL switch has two different meanings for the SEND command and the REMIND
command, but is the same bit in either case.  Bits which are currently unused
should be zero.

If the 400 bit in AC 16 is on, the left half of AC 11 is taken as the TMPCOR
file name; the TMPCOR file PPN is the alias PPN of the MAIL job.  The 200 bit in
AC 16 will delete either a DSK file or a TMPCOR file.

The usual case is sending a message to a programmer name.  For this case, AC 6
should contain zero in the left half and the sixbit programmer name
right-justified in the right half.  Do not use "." for your own programmer name
(use the programmer name explicitly) nor "*" for a wildcard destination (use 20
bit in AC 16).

Mail can be sent to any file (as in the #file destination format) by setting the
0,,10 bit in AC 16 and specifying the filename in ACs 6-10.  More than one
destination, or a recipient at another network host, must be specified by using
an indirect file as in the @file destination format; set the 0,,2000 bit in
AC 16 and specify the file with the destination list in ACs 6-10.

Any files used (except the TMPCOR message file) must be on device DSK.  No
default extensions will be used; specify the desired extension explicitly.  (The
right half of an extension word must be 0.)  A zero file PPN uses the job's
alias PPN as usual.

Exactly one of the 7,,0 bits should be on in AC 16 to specify the command to be
carried out.  The effect of the PLAN command is achieved by specifying a MAIL
command with the delete-old-text bit and explicit file destination (2,,11 in
AC 16) and "   prg.PLN[2,2]" as the destination filename in ACs 6-10.

The date and time in AC 15 is in the format:

        BYTE (4)MONTH (5)DAY (6)YEAR (3)DAY-OF-WEEK (6)HRS,MINS,FLAGS

The flags are used for special formats:

        0,,1    absolute date, DAYCNT in left half
        0,,2    date is tomorrow (lh is zero)
        0,,4    every day reminder (lh is zero)

Otherwise, zero in the left half means today's date, a nonzero number in the
7,,0 bits is an every-week reminder (1=Wed, 7=Tues), and anything else is an
every-month or every-year reminder with at least one of the month and year
fields zero.  Month 1 is January, day 1 is the first of the month, and year 1 is
1965.  The HRS field is hours past midnight (0-23) and the MINS field minutes
past the hour (0-59).  An absolute date (no wild fields) must be in DAYCNT form.

If the SWAP technique is inappropriate, it is also possible to queue MAIL
requests.  This facility was designed for the FTP server but can be used by
other programs.  Write a file called <anything>.FTP[RMD,SYS] which contains, in
text form, a MAIL command and destination list on the first page, and the
message text on the second page.  (This is the format of the MAIL$E.TXT file
used for editing messages with E.)  When the remind phantom is next run, it will
try to start a MAIL job which will execute the command and delete the file.

The normal SNAIL startup procedure (starting MAIL at one more than its normal
start address) is used by E both to return to MAIL after you have used E to edit
your input text file and in response to the MAIL command in E.  This entry is
not normally used except by E.
                           A4.23  The CANCEL Command


The monitor command CANCEL will run the CANCEL program which will list, and
allow selective deletion of, REMIND requests from or to you, BATCH and LATER
requests by you, and queued mail from you.  This program can also be used to
list these requests without asking whether you want to delete them: after any
request is listed, type the letter L in answer to the deletion question and any
remaining requests will be listed without interruption.  Type N to keep a
request and to go on to the next one.  Typing Y to a message deletion question
will cause the message to be deleted and mailed back to you (for editing and
re-use).  Typing F will delete the request but will not mail it back to you.
Typing a decimal number to the deletion question will cause CANCEL to keep that
request and to keep and skip over the given number of subsequent requests, just
showing a header line for each request skipped.  Since the CANCEL program has to
share the use of the reminder queue files with the system remind phantom job,
there will sometimes be a delay in the listing of reminders.  An appropriate
message is typed in this case.
                            A4.24  CKMAIL and CKSUM


The CKMAIL command can be used to find out if you or someone else has new mail.
If this command is given without an argument, then it looks for new mail for the
logged in user giving the command.  To find out if someone else has new mail,
follow the command with the programmer name of interest, e.g., CK ME ("CK" is
currently a valid abbreviation for this command).  CKMAIL will look first for
the "standard" user mail file, often called just "∂", and if that doesn't exist,
then it will look for the special file which a user PRG can create called
MSG.MSG[1,PRG].  This may occasionally cause confusion if both of these files
exist, since the MAIL program in that case will use MSG.MSG but CKMAIL will only
report on the ∂ file.

The CKSUM program can be used to keep checksums of various text files in order
to know when one or more files of interest have been changed.  The checksums are
kept separate for each page, so that you can tell what page(s) have been
changed.  This is the normal way of monitoring messages posted in the online
bulletin board file, BBOARD.TXT[2,2] (also called \BBOARD), or in other
discussion-type files.  CKSUM provides the option of swapping to E to edit the
changed files, with simple E commands available to get to the pages that have
been changed.  For complete details, see the online CKSUM documentation in the
file CKSUM.DON[UP,DOC], which describes all the options available.

A useful feature of the CKMAIL program is that when no argument is given, CKMAIL
will swap to the CKSUM program if the user has a checksum data file (CKSUM.DAT).
Thus, to run CKSUM, you can either say R CKSUM or simply CK (running CKMAIL
first).
                             A4.25  The RCV Command


The RCV program allows MAIL messages to be selectively deleted, listed, or saved
as desired.  The program is called by simply entering the monitor command RCV.
All mail files which can be construed as being for you are offered for your
perusal.  It is also possible to edit other users' mail files with RCV by giving
an argument, e.g., RCV BH.  The command RCV * will allow editing of the system
message file NOTICE.TXT[2,2].  Most mail files are maintained in E format, and E
format is not preserved when such a file is edited with RCV--therefore:

  NOTE: If you edit an E-formatted file, RCV will invalidate the directory
  page and issue a warning.  Such files should usually be edited with E to
  preserve the pages and format!

RCV also allows editing of the files created by the news service automatic
notification feature; the command RCV \ will present your notifications for
editing, and RCV \PRG will allow you to edit the notifications sent to user PRG.

It is also possible to use RCV on files not in [2,2] (such as saved message
files previously created with RCV) with a command like:

RCV #filename

with default of DSK:SAVED.MSG in your (alias) disk area.  The conventions given
below for output filenames also apply here.

Finally, the command RCV ?PRG will type the plan file for user PRG, if there is
such a file.  In this case, the file is merely typed, not edited.

  NOTE: Once RCV has opened a message file, you should exit only by typing "E"
  to an option request, as explained below.  Typing <CALL> to exit may result
  in losing some of your message text!

RCV deletes without comment all <FORM> characters in any file edited (that is,
any file actually changed).  Thus any page structure of such a file is destroyed
by RCV.

When a mail file is opened, messages are typed out one at a time, and for each
message you may select several processing options, in the format

<options> [ <space> <filename> ] <cr>

where the [...] represents an optional argument.  Each option is represented by
a letter; more than one may be used, except that a few options must be used
alone, as noted below.  The filename may be specified if you select the C (copy)
or T (transfer) option.  For help in specifying a file, use ? as the filename.
Here are the option letters which select a final disposition for the message:

  S  Save the message in the mail file.
  D  Delete it from the mail file.
  C  Copy it to a file of your choice.
  T  Transfer it to a file.  Like CD.
  L  Line printer spool it.
  X  XGP spool it.
  K  Transfer it to the file LOGOUT.MSG, which will be typed automatically
     when you log out.

If none of the above are used, the message will be Saved.  Combinations may be
used, e.g., LD will spool the message on the line printer and also delete it
from the mail file.  The message will be Saved unless D or T is explicitly
specified.  Along with any of the above (or alone, implying S) may be used at
most one of the following editing options:

  A  Append to the message from the terminal.
  Z  (displays only) Edit the message line-by-line using the system line
     editor.  If you need help with this facility, type <control><meta>? after
     entering the line editing mode.
  M  (displays only) Modify the message by running the text editor, E, with
     that message as its input.  Return from E by typing <control>X RUN.

Along with any of the above, or alone, can be used the following option letters
to avoid seeing more messages:

  E  Exit, and enter spooling requests from L or X options.
  N  Go to the Next mail file, if any, else exit like E.

If the message was longer than the amount RCV types out before asking for option
requests, the following option may be used along with any others specified:

  Q  Quiet processing; do not type the remainder of the message while
     processing it as usual.

Note: E or N with no other options implies Q automatically.  Alternatively, any
of the following may be used as the only option, for special processing:

  P  Postpone the decision for this message.  This applies only if the message
     was longer than the amount RCV types before asking for options, and you
     wish to see the rest of the message before choosing options.
  ?  Type this option list.

Spooling requested by L or X is not done until RCV is exited (by typing E to an
option request, or by running out of input).  The default filename for C and T
is DSK:SAVED.MSG in your alias area.  Filenames may only be given along with a C
or T option; if C or T is used without a filename the previous file is
continued.  (The first time, you will be asked for a filename, which may be
simply <cr> for SAVED.MSG.)

If you use an argument in the RCV command to edit another user's mail, the first
time you specify any option which would remove a message from the mail file or
alter its contents you are asked to confirm it.  Once you have confirmed such an
option, however, you are not asked again.

There are two options provided at displays for editing the text of a message.
The M option writes the message in a disk file, QQRCV.TMP, and runs the E
editor, which allows great flexibility because of E's powerful editing
capability.  However, it is rather slow, because all of RCV's internal
information and all the message files must be saved on the disk.  For minor
corrections to a short message, you may prefer the weaker but faster editing
capability provided in RCV itself by the Z option.  If you select that option,
the lines in your message will be presented to you one by one in your terminal's
line editor.  You may edit each line, using the normal line editor commands, and
type <cr> when done with a line.  You may also type the following special
characters (α means control, β means meta):

  α<cr>    Accept the current line as it now appears in your line editor
           buffer and stop line editing, accepting the rest of the message as
           is.
  αβD      Delete the current line.
  <alt>    Undo the changes in this line, loading a fresh copy into the line
           editor.
  αβ<cr>   Accept lines to be inserted before the current line, until an
           inserted line is terminated with α<cr> instead of <cr>, or <alt> is
           typed at a blank line.
  αβI      Same as αβ<cr>.
  αD       (at the end of a line) Combine this and the next line and load the
           combined line into the line editor.
  β<cr>    Break the line at the cursor, accepting the text to the left of the
           cursor as it stands and editing the remaining text as a new line.
  αβA      Leave line edit mode, as for α<cr>, but accept text from the
           terminal to be appended after the existing text, as if the A option
           had been selected.
  αβ?      Type this list.

Blank lines presented for editing in the Z option are indicated by the typing
out of a space before loading the line editor with the empty line; thus
originally empty lines will be indented in the typeout.  In both M and Z
options, the initial header line is not edited.  In the Z option, the blank line
at the end of the message is not edited.  In the A option, appended text will be
inserted in front of the blank line at the end of the message, unless the P
option was previously used on the current message.

The first time you specify C or T, you are asked to specify a file name if one
was not included in the option line.  You can reply with either a standard
filename, ?, or <cr>.  Just <cr> uses the default file name, DSK:SAVED.MSG in
your (alias) area.  Just ? will print a helpful message and let you try again.
Thereafter, whatever file you specified will be used for all C and T messages
(the file is not closed until you exit or select another one) until you specify
a new filename along with a C or T option as described above.  Note: if the
specified file already exists and is in E format, the new messages are added at
the end of the file preceded by a single <FORM>; if the file already exists but
is not in E format, the new messages are added at the beginning of the file.  If
the file does not already exist, a warning that you are creating a new file is
issued; the file will be created in E format unless two conditions are met: if
the output file is not in the [2,2] directory, and the input file is in non-E
format, then the output file will also be in non-E format.

If all messages are removed from an input file, the file is deleted after all
output files are closed, unless the input file is named OUTGO.MSG in which case
the empty file (which may actually contain a few spaces, carriage returns, and
linefeeds) will survive.  If none of the messages in an input file is deleted or
changed, RCV does not write out a new version of the file; thus the file's time
and date written are unchanged, and, particularly, any E directory the file may
have had is still intact.

The notation ↓chars↓ may be used to get non-alphameric characters in a filename.
In addition, a shorthand notation is provided for entering names of mail files:
if the character ∂ is the first character of the filename, then the device
becomes DSK, the default extension .MSG, and the default ppn [2,2].  (The
extension and ppn can be changed later in the filename.)  If the next non-blank
character is not alphameric, the filename used is your programmer name right
justified, e.g., ↓   REG↓.  (Note that this is your own login name, not the name
whose mail you are editing.)  Thus, the filename ∂ represents your own mail
file.  You can specify a different programmer name with the format ∂prg and
either this or the format ∂ can also be optionally followed by an extension
and/or a PPN to change the default values as described above, e.g., ∂.PUR or
∂[1,ME].

RCV has a fairly small message buffer.  If a message is longer than that buffer,
seeing the first few lines of the message may tell you enough about it to decide
how to process it without seeing the rest.  Therefore, in that case, you will
see as much as fits, followed by an overflow notice and an option request.
After you enter the desired options, the remainder of the message will be typed
as it is being processed, so you may safely use the Delete option and you will
still see the rest of the message.  If you want to avoid this continued typeout,
type the letter Q (for Quiet) before your option choice, e.g., QD for Quiet
Delete.  Q is only recognized when a message overflows.  If you select E or N
with no other options, you get Q automatically.  If this is not what you want,
type, e.g., SE.  If you wish, you may postpone the decision on how to process
the message until after seeing the rest of it, by typing P to the option
request.  This will type the remainder of the message and ask again for options.
QP is illegal, and P is only legal when a message overflows.

RCV may be used when not logged in; however, each user can control access to his
own mail, by OPTION.TXT options.  Three possibilities are available.  The
default is no access.  To allow your mail to be read but not modified, put

RCV:READ

in your OPTION.TXT file.  If the not-logged-in user types RCV PRG the file
examined is OPTION.TXT[1,PRG].  You may also allow not-logged-in users to edit
your mail file as if they were logged in by using

RCV:WRITE

as the option.

Not-logged-in users at Data Disc or III terminals are always given at least READ
access to mail, providing the message file is not protected against RCV.

It should be noted that the normal file protection mechanism still applies, so
that most options which involve copying the message to another file will not
work when not logged in.  This includes C, T, K, L, X, M, and P.

A not-logged-in user who is reading mail as permitted by the READ option may
safely use <call> to quit RCV.

There is a special option available in RCV for reading the A.P.  news digest.
This option is provided when the RCV command is given without an argument, if
you have an OPTION.TXT file with a line of the form

RCV:DIGEST;

You are asked "Read A.P. digest?" if the digest file exists.  This option may be
used along with READ or WRITE as described earlier.

Another special option available through the OPTION.TXT file is:

RCV:NOMAIL;

If you have this option and give the RCV command without an argument, RCV
ignores your main message file and simply processes any other files which it
would normally handle.  This is provided for users of various special RCV
features (such as DIGEST above) who use E to edit their mail files since mail
files are normally in E format.  To override the NOMAIL option (i.e., to edit
your mail file with RCV), give your programmer name explicitly in the command,
e.g., RCV PRG.

For use an non-display terminals, RCV has a mode in which it accepts terminal
input in SOS representation (see Appendix 10).  The main reason for this is to
allow ?* instead of ∂ for redirecting messages to another mail file, but it can
also be used with the append option to allow appending upper/lower case text
from an upper-case-only terminal.  The following notes apply:

  1. When RCV is started, it decides whether or not to use SOS representation on
  the basis of the FCS (full character set) bit maintained for each terminal by
  the monitor.  This bit is set by the TTY FULL command (or ESC F at a display)
  and cleared by TTY NO FULL (or BREAK F).

  2. Whenever RCV reads an altmode character from the terminal, it will enter
  SOS mode and otherwise ignore the altmode, except that if you are already in
  SOS mode the sequence ?<alt> will leave that mode.  (If you are not in SOS
  mode, of course, the ? will be taken as a real question mark and the <alt>
  will enter SOS mode!)

  3. These comments apply even to the original command line, although the
  monitor will echo a crlf after the altmode to confuse you.  Note that if your
  FCS bit is off and you want to invoke the RCV feature which types a user's
  plan file, you must say RCV ??prg instead of RCV ?prg as usual.

  4. Under no circumstances is terminal Output done via SOS conversion.  I hate
  seeing all those question marks!

  5. If you are in SOS mode and type ? followed by a character which is not
  defined as an SOS code, the character will be treated, and echoed, as ASCII 7;
  this will ring your terminal's bell if it has one, give an error message if
  you are responding to an option request, and insert a π in your message if you
  are appending.
                                    A5  DART


DART (Dump And Restore Technique) is a program that saves disk files on magnetic
tape and restores files from tape to disk.  Dart is used to make periodic
backups of the file disk.  Dart is also available to users who wish to maintain
their own backup tapes.

Dart can be run by the monitor commands listed below or it can be started simply
by R DART.  In the latter case, Dart signifies its readiness to accept a command
by typing an asterisk (*).  All Dart commands are available directly as monitor
commands except for LIST (same as TLIST), EXIT, and the privileged commands
described later.  Commands are typed on one line and terminated by RETURN.  In
the Dart command syntax descriptions below, braces, { and }, are used to denote
optional items.  Vertical bar, | , denotes an exclusive-or choice.  Pointed
brackets, < and > , are used to enclose syntactic items that are defined below.

  DUMP     {<dest>←}{<source>}
  REAP     {<source>}
  UNREAP   {<source>}
  RESTORE  {<dest>←}{<source>}
  PUMPKIN  {<dest>←}{<source>}
  UNPUMPKIN
  PLIST
  REWIND   {<dev>{:}}
  EOT      {<dev>{:}}
  ADVANCE  {FILE|RECORD} {<dev>{:}} {<count>}
  BACKSPACE{FILE|RECORD} {<dev>{:}} {<count>}
  LOCATE   {<dest>←}{<source>}
  TLIST    {<dest>←}{<source>}
  LIST     {<dest>←}{<source>} ;not available as a monitor command
  TURKEY   P<number>|T<number>
  EXIT                         ;not available as a monitor command

  <dest> ::=    {<dev>:}<file>{.<ext>}{[<prj>,<prg>]}
  <source> ::=  {{<dev>:}{[<prj>,<prg>]}@}
                     {<dev>:}<file>{.ext}{[<prj>,<prg>]}{,<source>}

  <dev> is one of DSK, MTAn, or UDPn.
  <file> is any file name or *
  <ext> is any file extension or *
  <prj> is any project code or *
  <prg> is any programmer name or *
  <count> is any string of decimal digits.

Now here are the details of the various Dart commands.

  RESTORE  This command will restore from tape to the destination the files that
           are described by the source term.  A null source or destination means
           *.*[current alias]; this means that the command
           RESTORE OPTION.TXT[1,ME] will read the named file from tape and write
           it on your current disk area (alias).  The command
           RESTORE [*,REG]←[*,REG] will restore all of REG's files to the areas
           that they were dumped from.  Note that if any * terms are specified
           or implied in the source, the entire tape will be searched for
           matching terms.

  PUMPKIN  This command is just like RESTORE except that instead of restoring
           files from tape immediately, it queues a request with the Great
           Pumpkin, who comes by night to restore your files.  It will restore
           from the most recent system dump tape(s) containing the file(s),
           unless you follow the command name with a switch in the form /P781 or
           /T31 to request a specific DART tape, or of the form /4-Oct-78 or
           /10/4/78 to request a version written on that date or earlier.  (This
           would be useful if a file has been overwritten and dumped, and you
           want to restore an earlier version.) Don't specify a source device
           with this command.

  UNPUMPKINThis command takes no arguments; it lists all pending PUMPKIN
           requests from your programmer name, and allows you to delete the
           requests selectively.

  PLIST    This command takes no arguments; it lists all pending PUMPKIN
           requests, including the date on which each was entered.

  REWIND   This command will cause the device named to rewind to load point.
           MTA0 is the default if no device argument is used.  The device named
           should be a magnetic tape unit.

  EOT      This command will cause ADVANCE FILE to be repeated until either two
           adjacent file marks are seen (logical end of tape) or until physical
           end of tape is reached.  The tape is left positioned between the two
           consecutive file marks, so that subsequent dumping will overwrite the
           second mark, thus removing the logical end of tape mark when more
           data is written.

  ADVANCE or ADVANCE FILE   This command will cause the tape to advance past the
           next file mark on the tape.  If a repeat factor is given, then the
           command will be repeated that number of times.  Note: DART often
           records more than one disk file on a mag tape file!  Therefore,
           ADVANCE FILE will (sometimes) skip more than one disk file.

  ADVANCE RECORD   Same as ADVANCE FILE except that instead of file marks,
           record marks are used.  This command leaves you at the front of a
           record.

  BACKSPACE or BACKSPACE FILE   This command will cause the tape to move
           backwards until a file mark is seen.  DART then does one ADVANCE FILE
           operation to position the tape at the front of a file (immediately
           after the file mark just read).  If a repeat argument is given, then
           that argument is used to repeat the backspace operation.  Only one
           ADVANCE is used, after all backspace operations.  Note: BACKSPACE or
           BACKSPACE 1 will position the tape at the front of the current mag
           tape file.  BACKSPACE 2 will position one previous, etc.

  BACKSPACE RECORD   Same as BACKSPACE FILE except that record marks are used to
           stop the operation instead of file marks.  After all backspaces are
           completed, DART does an ADVANCE RECORD command.

  LOCATE   For each file named in the argument list, this command prints the
           tape numbers where this file was dumped and the corresponding
           creation dates of the file.

  TLIST    This command will list on the destination device the names of the
           files that are read from the source device.

  TURKEY   This command takes as its argument the number of a DART system dump
           tape, and tells you who last used it.  It is to find out whose thrug
           to squuk if you find a DART tape lying around not where it belongs.

  DUMP     This command will write on the destination device, which should be a
           magtape (default is MTA0), those files that are specified by the
           source term.  If there is no source argument, *.*[current area] is
           used.

  REAP     The REAP command takes a list of files, like DUMP, and causes those
           files to be dumped twice and then deleted.  More specifically, files
           marked by REAP will be dumped in the next permanent-class system dump
           (P-dump) regardless of when written or whether or not marked
           dump-never.  If a file so marked has then been dumped on a permanent
           tape at least twice, it will be deleted.  Note that the file will be
           P-dumped at least once after you give the REAP command even if it had
           already been P-dumped twice or more.  No notification is given when
           the files are deleted; once you have REAPed a file you should
           consider it gone.  However, there is an UNREAP command which will
           remove the REAP indication for one or more specified files, if they
           have not yet been deleted.  Any modification to a file clears the
           DART information word, and therefore UNREAPs the file.  That is, it
           will not be deleted automatically unless you re-REAP it after the
           modification.  REAPing a file does not remove it from the calculation
           of the disk space you are using, until the file is actually deleted.
           Therefore, a REAP command at the last minute before a purge will not
           keep you from being purged.  If you REAP your files as soon as you no
           longer need them, though, they should be gone when the purge comes
           around.  DIRECTORY, DIRED and friends indicate that a file has been
           marked for reaping by showing an "R" in the "dumped" column.

  UNREAP   The UNREAP command takes a list of files and removes the reap-mark,
           if any, from each of those files, thus undoing the effect of a REAP
           command (if the files have not already been deleted).
                             A5.1  Dart Tape Format


Tapes are usually recorded at 800 BPI, odd parity.  Record length does not
exceed 1280 words. There are three types of records: Header-Trailer records,
File-Start records, and Continuation records.

           Header-Trailer Record Format

  Word 0:  version,,length  version is the positive version number of the DART
                            that created this tape, length is the length of the
                            data following

  Word 1:  'DART '          sixbit DART

  Word 2:  '*HEAD*' or '*TAIL*' data in sixbit

  Word 3:  time,date        BYTE(3)HIDATE(10)0(11)TIME(12)LODATE, where TIME is
                            in minutes after midnight, HIDATE is the high-order
                            field of the date in system format, and LODATE is
                            the low-order part of the date

  Word 4:  ppn              the name of the person running Dart

  Word 5:  class,,tapno     Tape number of this tape and Dump class of this
                            dump.  Tape numbers are kept only for system class
                            dumps.  User class is class 0.  Classes 1 and 2 are
                            system classes (Temporary and Permanent).


           File-Start Record Format

  Word 0:  -n,,length       -n denotes file-start records, length is the number
                            of data words that follow, and "n" is the format
                            number of this tape.  There have been two formats
                            used: formats 1 and 2.  The only difference is that
                            word 21 below (word 17 of the retrieval) is zero in
                            format 1 but holds the record offset of the given
                            file in format 2.  If a file start is seen, then at
                            least all of the retrieval data (words 2-21 below)
                            is present in the current magtape record.

  Word 1:  devnam           name of the source device

  Words 2-21                file retrieval of this file as it appeared on the
                            disk

  Word 22-length            data from the file

  Word length+1             exclusive-or of words 1-length

  Word length+2             if this is 0, skip to next record; if this is <0,
                            treat as word 0 above


           File-Continuation Record Format

  Word 0:  0,,length        length is the number of data words

  Words 1-length            data from the file

  Word length+1             exclusive-or of words 1-length above

  Word length+2             same as in File-start record
                         A5.2  Dart File Backup Policy


The following policy describes the use of Dart for backing up the disk on tape.

There are three classes of system dump: Full, Permanent and Temporary.  Full
dumps are never done at SU-AI.  (Instead, disk pack copies are done
approximately every 3 months, to protect against disk crashes.) Permanent dumps
are made approximately once a week.  Temporary dumps are done approximately
daily Monday through Friday of each week.

Permanent tapes are kept practically forever.  Temporary tapes are kept about
one month before being re-used.  The rules below determine what files are dumped
in a system-class dump.

  1. The following types of files are never dumped in a system-class dump: empty
     files (those of length 0); files with protection of 400 or greater; and
     files which are estimated to not fit on one tape (this currently refers to
     any file larger than about 2209 Kwords).

  2. Any file not covered by 1 above will be dumped if it has the dump date
     invalid bit set (this generally means that during a recent dump, Dart
     didn't finish dumping this file).

  3. A full dump will dump all files except those eliminated by 1 above.

  4. A P dump will dump all files (not covered by 1) that have been P-dumped
     fewer than 2 times and are more than 4 days old.  A P dump will also dump
     any file marked for reaping no matter how old the file is or how many times
     it has already been dumped.

  5. A T dump will dump all files (not covered by 1) that have never been
     P-dumped and have never been T-dumped.

The intention of this policy is to provide backup for the disk to prevent total
loss of files in a major crash.  A secondary effect is to provide individuals
with short term backup against their own mistakes.  It is not the intention of
this policy to provide eternal backup of every file that ever appeared on the
disk.
                         A5.3  Privileged Dart Commands


The area [DMP,SYS] is privileged to make backup dumps of the disk.  The
following commands are legal if you happen to be logged in as [DMP,SYS].

  FDUMP    Full dump of the disk
  PDUMP    Permanent Dump of the disk
  TDUMP    Temporary-class dump of the disk
  PICKUP   Continue with a privileged dump after a system crash.
  PRESTORE Restore files requested by Pumpkin commands.
  MRESTORE Restore files from a Master file-restore list, used
           in the event of a disaster such as a disk crash.
  PURGE    Dump some files to Permanent tape and then delete them.

The FDUMP, PDUMP and TDUMP commands all take an optional argument of the form
<dev>:← which specifies the tape to dump to.
                                  A6  NETWORKS


Users of WAITS can utilize many other computers by connecting to such computers
through one or more networks.  The main networks connecting directly to SU-AI
are the ARPA network and the SUNet.  The ARPA network is a facility organized by
the Advanced Research Projects Agency of the Department of Defense to connect
computers at various research centers funded by ARPA.  SUNet is an Ethernet
reaching various computers at Stanford.

Two main system facilities are provided for connecting to other computers on
some network: the user Telnet program and the File Transfer Protocol program
(FTP).  Telnet allows you to use your terminal as if it were a terminal of the
remote host computer; FTP provides high-speed transmission of data between
hosts.  This appendix explains the use of the system programs that provide these
capabilities.  Users can also write their own special purpose programs which
access a network; device IMP is used to deal with the ARPAnet and device PUP is
used to deal with the Ethernet.  Details on using these devices will be found in
the UUO Manual; users are also encouraged, when building their own network
programs, to take advantage of the network software package found in the file
NETWRK.FAI[SUB,SYS].

A network connection typically involves a program at both hosts.  For example,
to make a Telnet connection to another host, you run the user Telnet program
here.  This program establishes a connection with the server Telnet program at
the other host.  We provide user and server programs for several protocols
besides the main ones described here; for example, the monitor commands WHO,
TALK, and FINGER can function as network user programs for special protocols
when directed to another host.

Below are several monitor commands used to make Telnet or FTP connections to
other network computers.  Each of these commands takes as argument the name of
the remote host you wish to use.  You must be logged in to give any of these
commands.  Except where noted, these commands work to connect you to a host on
either the ARPAnet or the SUNet.

  Command         Description

  TELNET or TN    Either of these commands makes the "normal" Telnet
                  connection to a remote host, allowing you to use your
                  terminal as if it were on that host.  The TELNET and TN
                  commands are equivalent.
  SUPDUP or SD    Either of these commands runs a special version of Telnet
                  for using remote displays with the particular hosts that
                  support the Supdup protocol.  The hosts supporting this
                  protocol are primarily WAITS systems and the ITS systems at
                  MIT.  Type SD ? to find out which hosts you can Supdup to.
                  The SUPDUP and SD commands are equivalent.
  DTN             This command makes a Telnet connection using a program that
                  simulates, to the remote host, a Datamedia 2500 terminal,
                  while converting the resulting Datamedia display output to
                  whatever is appropriate for your actual display.  This
                  allows you to use Datamedia support on other systems even if
                  you don't have a Datamedia.
  OTN             This command makes an ARPAnet connection using the "old"
                  Telnet protocol, which is now largely obsolete.
  FTP             This command make a File Transfer Protocol connection with a
                  remote host, allowing you to transfers files and/or file
                  information between the local and remote hosts.

Each of the above commands takes a remote host name as argument (some will also
accept a host number or a "socket" number -- see details later in this
appendix).  You can use the following command to find out HOST names, numbers,
and descriptions.

  HOST     This command takes a host name and tells you what that host really
           is.  If you supply a nickname, you'll find out the formal name; if
           you supply a formal name, you'll find out some details.  If you don't
           give any argument, then the entire host table is typed out (it's
           fairly long).  You don't have to be logged in to use the HOST
           command.
                             A6.1  The User Telnet


There are several externally-similar user Telnet programs available.

Our normal user Telnet program is run by the TELNET or TN command, which takes a
host name as argument.  The program attempts to connect to the specified host.
It will type "Trying" when it starts setting up the connection, then "Open" if
successful, or an error message otherwise.  The TELNET and TN commands use the
so-called new Telnet protocol, which is the current standard.

The OTN command is similar but uses the old ARPAnet Telnet protocol, in case you
need to use that protocol, which is mostly obsolete.

The DTN command invokes the Datamedia simulator Telnet program.  This allows you
to use another system's Datamedia support even if your display isn't a
Datamedia.  The DTN program is explained further on page 159.

The normal syntax for all of these commands is simply:

TELNET host

where "host" can be either the official name or a nickname of the host of
interest.  If you want to connect to a non-standard socket at the given
destination, then you can use either the form:

TELNET socket,host

to connect to a particular socket on an ARPAnet host, or the form

TELNET subnet#host#socket

to connect to a particular socket on an Ethernet host (the "#" characters are
actually typed here and the three fields are numeric).  The program will prompt
for an argument if one isn't given.  A "?" typed in the command line makes the
program type out a short help message.

The normal host field can be a host name or number.  Numbers are octal unless
followed by a decimal point or if an 8 or 9 occurs in the number, in which case
it is assumed decimal.

The host name or number is the network site you wish to connect to.  There is a
list of hosts in this appendix; an up-to-date list can be seen by giving the
monitor command HOST.

The socket number argument is used to connect to some special server program at
the remote host, rather than the normal Telnet server; for instance, on the
ARPAnet socket 27 gets you the normal Telnet server and socket 3 gets the FTP
server.  Special servers are used to handle commands like WHO given with a host
name as argument.  Normally only the maintainers of network programs will need
to specify socket numbers.
                    A6.2  TELNET, DTN, OTN, DIAL and PTYJOB


In addition to the user Telnet programs TELNET, DTN and OTN, there are two other
similar programs that let you talk to a selected computer system.  These two
other programs are: (1) DIAL, which lets you dial out through the telephone
network to any computer reachable that way; and (2) PTYJOB, which lets you use
many of the features of Telnet although you are still connected to WAITS
(through a PTY--a pseudo terminal).  Much of the information that follows
applies not only to one or more of the Telnet programs, but also to DIAL and
PTYJOB.  In particular, the discussion below about character-set conversion
applies fully to DIAL.  Since PTYJOB goes from WAITS to WAITS, there is no
conversion involved, however some of the features for typing certain characters
to remote hosts through Telnet and DIAL can also be used in PTYJOB.  The format
of the DIAL command is explained on page 86.  The PTYJOB program is run by
typing R PTYJOB to the monitor.

Foreign hosts do not use the WAITS character set.  Instead, they accept standard
ASCII codes.  Letters, digits, and most of the punctuation characters available
in ASCII are the same in the two character sets.  The main difference is that
codes 1 to 37 (octal), used for special printing characters in WAITS, are
control characters in ASCII.  The precise use of these control characters is
defined by the remote host.  TENEX hosts, for example, use ASCII control-A to
mean "delete one character," like our BS.

Telnet has two modes: display and transparent.  Display mode is legal for all
terminals, is the default mode for all displays, and is the only mode available
on a DD or III.  Transparent mode is the default mode for non-displays and is
also available on individual displays (but not on DDs or IIIs).  DIAL and PTYJOB
provide only display mode.
                  A6.3  Display Mode (Telnet, DIAL and PTYJOB)


In display mode, character set conversion is done between WAITS ASCII and
standard ASCII.  To provide easier use of the standard ASCII character set,
Telnet, DIAL and PTYJOB interpret the CONTROL bit to mean ASCII control; i.e.,
CONTROL on a letter makes Telnet (et al.) convert the letter to upper case and
subtract 100 from the character code.  Thus, CONTROL-A becomes ↑A (code 001) and
CONTROL-C becomes ↑C (code 003) before being sent to the remote host.  Telnet
(et al.) uses META and CONTROL-META characters as commands to itself, as listed
later.  In some cases, META and CONTROL-META are equivalent.  In others, a
processing switch is set by META and cleared by CONTROL-META.  Display mode is
the only legal mode for DD's and III's.

In the DIAL and PTYJOB programs only, a non-display user can enter commands
either by using the META and CONTROL-META forms used on displays or by using the
command escape character (initially ↑↑, control-uparrow).  Typed once, the
command escape is interpreted as the display CONTROL bit, which becomes ASCII
control (thus ↑↑ A gives ↑A).  Typed twice, the command escape is taken as META,
to give a basic command (thus ↑↑ ↑↑ Q is the Quit command).  Typing the command
escape three times gives CONTROL-META, to enter a complement command (e.g.,
↑↑ ↑↑ ↑↑ D closes an output file).

Below are the differences between the WAITS ASCII and the standard ASCII
character sets (not counting the control characters).  Automatic conversion
handles the following translations (in display mode):

char      WAITS    ↔   external

  ~          32    ↔    176
  }         176    ↔    175
 ALT        175    ↔     33
  ≠          33    →     33
 EOF        612    ←     32

The WAITS not-equal has no external representation and cannot be entered from a
remote host.  All codes other than those listed above are transmitted unchanged.
Note that our BS (octal 177) is the ASCII delete; there is an ASCII backspace
(10), which is our λ.  Typing λ or CONTROL-H to Telnet will produce that code.
The other possible ambiguities are our characters ↑ (136) and ← (137).  These
codes have two different meanings: the DEC PDP-10 version of ASCII agrees with
our use, but the official version uses those codes for ∧ and _.  Our network
programs support the arrow version, and our ∧ and _ characters are transmitted
unmodified as 4 and 30.
                      A6.4  Transparent Mode (Telnet only)


In transparent mode, no character set conversion is done.  All ASCII characters
(including ↑C) are read and transmitted as is, with the single exception of the
Telnet command escape character which is used to give commands to Telnet.  The
default command escape character is different for different classes of
terminals: for non-displays, it is ↑↑ (control-uparrow, octal 036); for EDIT-key
individual displays, it is EDIT-NULL; and for NOEDIT individual displays, it is
NULL.  (Remember that transparent mode is not available on DDs and IIIs.) 

To give Telnet a command while you're in transparent mode, you type the command
escape character followed by the command letter of interest.  Following the
command escape with a minus sign (-) complements the command indicated by the
following character.  To send the command escape character itself to the remote
host, you simply type it twice in a row (this is similar to a TIP's use of @ as
the escape character and doubling it to transmit it).  For example, on a
non-display ↑↑E does the E command and ↑↑-E does the E complement command.
Transparent mode is generally the more convenient mode on non-displays since it
really makes almost everything you type be transmitted unchanged to the remote
host; for that reason, transparent mode is the default on non-displays.
(Display mode is the default on all displays.)

Transparent mode is also useful for individual display users wishing to use a
foreign host's display service.  For example, if you want to use TVEDIT on a
Tenex system, you can go into transparent mode and tell Tenex you're on a
display.  In transparent mode, all characters typed, including those using the
EDIT key or the NULL character, are passed to the foreign host just as they are,
with no interference from the WAITS terminal service (the only exception is the
current command escape character).  Similarly, output from the foreign host is
passed to the user's terminal unchanged.

The command escape character can be changed to any character you want; use the X
command (↑↑X on a non-display, EDIT-NULL X on an EDIT-key display, NULL X on a
NOEDIT display) followed by the character you want as your command escape.

Transparent mode is not available in DIAL or PTYJOB.
                     A6.5  DTN: Datamedia Simulator Telnet


A special version of Telnet, called DTN, uses a Datamedia simulator instead of
the page printer, so that the Datamedia service of the remote host can be
utilized, even on a DD or III.  Naturally, DTN only runs on displays.
Additionally, actual Datamedia users are probably better off using Telnet in
transparent mode, since besides the grossness of simulating a Datamedia on a
Datamedia, it is also rather gross to use since the simulator's keyboard control
has been oriented around the DD keyboards.  However, DTN may be useful on
individual displays other than Datamedias, since the remote host may support
Datamedias but not the particular individual display type that the user has.

DTN is invoked by the DTN monitor command, and it takes the same format of
commands as TN.  When the connection is completed, the screen clears, and you
are on a simulated Datamedia.  The CONTROL bit maps to ASCII CTRL, and the META
bit maps to the Datamedia EDIT key.  NULL is sent the way you do it in ASCII,
i.e., CTRL-@, entered by CONTROL-@.

Commands are entered as follows: to do the basic version of a command, you use
CONTROL-META-FORM followed by the command letter; e.g., CONTROL-META-FORM Q gets
you out of DTN.  To do a complement command, use CONTROL-META-VT followed by the
command letter; e.g., CONTROL-META-VT D closes an output file.
                   A6.6  Commands to Telnet, DIAL, and PTYJOB


The command table below lists the various commands for Telnet (TELNET, OTN,
DTN), DIAL, and PTYJOB.  Except where otherwise noted, each of the commands
applies to all of these programs.  Commands to Telnet (et al.) are never echoed,
although their effects may cause terminal output.

The proper way to flush a connection from Telnet is with the Q (for Quit) or C
(for Close) command (their complements are the same).  This gracefully closes
the network connection and in the case of the C command prompts for another host
to connect to.  On a non-display in transparent mode, this is either ↑↑Q or ↑↑C.
CALLing out of Telnet is never a good way to flush a connection and of course
can't be done in transparent mode since ↑C is an ordinary character passed to
the foreign host.  The Q command is also used to quit from DIAL or PTYJOB.

Before we get to the command table itself, here is a table that summarizes how
commands and their complements are entered from various types of terminals in
display or transparent mode.  For convenience, the command form used in SUPDUP
(see page 161) is also included here, although SUPDUP does not use the commands
from the second table below.

                                        How to type a command called x
Terminal type  Mode         Basic Command (βx)          Complement  (αβx)

any terminal   display mode META-x                      CONTROL-META-x
non-display    Dial/Ptyjob  ↑↑  ↑↑  x                   ↑↑  ↑↑  ↑↑  x
non-display    transparent  ↑↑  x                       ↑↑  -  x
EDIT display   transparent  EDIT-NULL x                 EDIT-NULL  -  x
NOEDIT display transparent  NULL  x                     NULL  -  x
any display    DTN          CONTROL-META-FORM  x        CONTROL-META-VT  x
any display    SUPDUP       ESC  I  x

Note: we use β and αβ below to indicate respectively the basic version and the
complement of any command, since β usually means META and αβ is CONTROL-META and
those are the ways of entering commands in display mode.  ⊗ below means either
version of the command (β or αβ) can be used.

In commands that request a filename, the filename may be ended with altmode to
abort the command; there is no default file name or extension, and the PPN
defaults to the alias PPN in the usual way.

  Commands to Telnet (TELNET, OTN, DTN), DIAL, and PTYJOB

     ⊗A  (Telnet only) Sends an ATTN to the foreign host.  This usually means
         something like "return to monitor", but not all hosts may implement
         this.
     ⊗B  (Telnet only) Sends a BREAK to the foreign host.  This is distinct from
         ATTN, and most hosts probably don't implement this.
     ⊗C  (Telnet only) Closes the connection and asks for a new host name to
         connect to.  This also exits transparent mode and closes any output
         file open.
     βC  (DIAL only) Turns on control character mode.  In this mode all
         characters received from the dataphone are typed on your terminal.
         This is the default.
    αβC  (DIAL only) Turns off control character mode.  In this mode, octal
         codes 1-10, 16-37, and 177 are not typed on your terminal when received
         from the dataphone.
     βD  Opens an output file.  This command asks for a file name, then proceeds
         to write everything that comes from the foreign host in this file.
         Type ALT when asked for the file name to abort the command.  Note that
         characters you type, or characters from any input file that is opened,
         do not go into the output file unless the foreign host is echoing them.
    αβD  Closes the output file.  ⊗Q and ⊗C (Telnet only) also do this.
     βE  Local echoing mode: This makes WAITS echo your input characters and
         forces the foreign host not to.  In the DIAL program, this makes you
         look like a half duplex terminal and does not change the state of
         remote echoing.
    αβE  Remote echo mode: This turns off echoing within WAITS and requests the
         foreign host to echo user typein.  If the foreign host refuses to echo,
         the echo state is restored to local echoing.  In the DIAL program, this
         turns off local echoing but does not attempt to change the state of
         remote echoing.
     βF  Opens an append file.  Everything sent from the foreign host gets
         appended to a file that already exists.  If there was a file previously
         opened with βD, it will append to that, otherwise this command will ask
         for a filename.
    αβF  Same as βF, but always asks for a filename.
     βI  Opens an input file.  Everything in the file is sent to the foreign
         host.  Asks for a filename.  Type ALT to abort the command.
    αβI  Closes the input file.  ⊗Q implies this as well.  This may not be
         noticed if the program is busy sending the input file's text to the
         remote host.
     βJ  (Telnet only) Echo mode: Turns on local echoing without consulting the
         foreign host.  See βE.
    αβJ  (Telnet only) No echo mode: Turns off local echoing without consulting
         the foreign host.  See αβE.
     ⊗K  (Telnet only) Sends a protocol command to kill the remote job.  This
         command is not guaranteed to work since many hosts do not implement the
         network logout protocol.
     βK  (DIAL and PTYJOB only) Inhibits the echoing of LF after CR.  The system
         normally types a LF out when you type CR.  This command inhibits that.
         This command is different in effect from βR below, because it alters
         only what appears on your screen, not what goes out over the line.
    αβK  (DIAL and PTYJOB only) Enables the echoing of LF after CR.  The inverse
         of the above command.
     βL  Enters line mode.  This gives you the line editor on input.  This is
         the default for displays unless telnetting to an ITS system.  The line
         editor is always echoed locally, but in remote or no echo mode the line
         editor will vanish after activation.
    αβL  Enters character mode.  Transmission is character-at-a-time.  This is
         the default on non-displays and when telnetting to an ITS system.
         Useful for running DDT at a remote host.
     βM  (PTYJOB only) Enters a mode in which all 9-bit characters you type are
         sent unchanged to the PTY except βM, αβM, βZ, and αβZ.  (Of course, if
         you are in line-at-a-time mode some control characters are still
         interpreted by the system line editor.)
    αβM  (PTYJOB only) Leaves the above mode; META-characters are again
         interpreted as commands to PTYJOB.
     ⊗O  (Telnet only) Sends an ABORT OUTPUT command to the foreign host.  This
         should have an effect like that of ESC O locally on WAITS.
     βO  (DIAL and PTYJOB only) Turns on terminal typeout.  See αβO below.
    αβO  (DIAL and PTYJOB only) Turns off terminal typeout.  Useful when output
         is already going to a file and you don't want to waste the time it
         takes to type out on your terminal as well.
     ⊗Q  Quit: Closes the connection and exits.  Also closes any output file.
     βR  (Telnet only) Same as βI, but reads the file character-at-a-time
         instead of buffer- at-a-time.  This is less efficient, but also results
         in much less messy output, as the characters will be sent
         synchronously.  Asks for a filename.
    αβR  (Telnet only) Closes the input file, just like αβI (see above).
     βR  (DIAL and PTYJOB only) Inhibits the sending of LF after CR.  Normally,
         when CR is typed, a LF is invented by the system and CRLF is sent to
         the foreign host.  This command inhibits sending the LF after the CR.
    αβR  (DIAL and PTYJOB only) Enables the sending LF after CR.  The inverse of
         the above command.
     ⊗S  (DIAL and PTYJOB only) In line mode, this sends the text in the line
         editor now, without waiting for an end-of-line character.  If the ⊗S is
         preceded by one or more octal digits with ⊗ (e.g., ⊗1⊗7⊗7⊗S) then the
         specified octal code is sent as a character.  For example, ⊗0⊗S will
         send a null.
     βT  (Telnet only) Enters transparent mode.  Character set conversion and
         local terminal handling are disabled.
    αβT  (Telnet only) Enters non-transparent mode.  Character set conversion
         and local terminal handling are enabled.
     ⊗W  (Telnet only) Gets a status message from the host (sends an "are you
         there" query); some hosts don't implement this.
     ⊗X  Changes the command escape to the next typed-in character.  This is
         only meaningful in transparent mode.  On an EDIT-key display, the EDIT
         bit (parity bit under user control) is considered part of the command
         escape character, but on other terminals the parity bit is ignored in
         checking for the command escape.
     βY  (DIAL and PTYJOB only) Enters Datapoint simulation mode.  Works only at
         a Data Disc terminal.
    αβY  (DIAL and PTYJOB only) Leaves Datapoint simulation mode.
     ⊗Z  (PTYJOB only) Quotes the following 9-bit character, so it is sent to
         the PTY as is, regardless of the state of the βM/αβM mode switch.
⊗<form>  (DIAL and PTYJOB only) If there is an output file open, this inserts a
         FORM character in it.
     β@  (Telnet only) Disables debug mode.  This is the normal state.
    αβ@  (Telnet only) Enters debug mode.  Currently this reports the Telnet
         protocol negotiations between user and server.
αβ<alt>  (Telnet only) Enters DDT if one is present.  CPOPJ$G returns to Telnet.
                                  A6.7  SUPDUP


SUPDUP is the WAITS implementation of the ITS SUPDUP program, which is used for
Telnetting to ITS sites or other hosts that implement this protocol.  This
program uses the internal ITS display codes for highly efficient communication
and full use of ITS display programs over the network.  In addition, SUPDUP
allows the user to send the full ITS ASCII character set (which includes some
very hairy characters) and maps both keyboard input and display output so that a
display (DD, III, or individual display) appears as a funny kind of ITS display.

To use SUPDUP, give the SUPDUP or SD monitor command followed by a host name.
The only hosts accepted are AI, DM, MC, ML, SAIL, and S1; some of these can be
abbreviated to a single letter.  SUPDUP will then establish a connection with
the specified site, and after that you will effectively be a display there, with
full bucky bit capability.  Since SUPDUP will set up your "display type" at the
foreign host, you should not try to set it yourself, as that may interfere with
SUPDUP's operation.  SUPDUP will set things up to maximally utilize your
display.

Some mappings in input and output are made due to the differences between the
WAITS and ITS ASCII character sets.  Most of these mappings are transparent to
the user.  The design philsophy behind the mappings was to cause characters
typed on the WAITS keyboard to be seen by ITS as the character appears on the
key tops, and for characters received from ITS to be displayed as they would be
at a console at MIT.

Visible output mappings: Caret is mapped to AND sign (∧) since there is no code
in the WAITS character set for caret.  There is no way to distinguish between
AND sign and caret.  In addition, centered-dot, gamma, delta, and circle-plus
are not displayed (they generate an error message).

Visible input mappings: αz and αZ are mapped to [CALL], αβz and αβZ are mapped
to α[CALL] (deferred CALL), and α_ is mapped to [BACK NEXT].  ↑ is mapped to
caret; to send ↑ (distinct from VT), see below.  Some other more obscure
characters must be sent by using a command; see below.

To enter a command to SUPDUP, type ESCAPE I followed by the command character.
The following command characters are defined:

  B        Toggles the blinking of the cursor.
  K or L   Kills the job on the foreign host and breaks network connections.
  P        Temporarily restores the page printer.  Typing any character will
           return your screen to the foreign display.
  Q        Quit: closes network connections and detaches the job on the
           foreign host if there is one.
  R        Records the contents of the screen in a file; asks you for the name
           of the file to write.  REENTER does this too.
  V        Re-draws the current screen.
  ?        Displays helpful information on using SUPDUP.

Command mode (typing ESCAPE I) also allows some of the more esoteric ITS
characters to be sent.  For example, when preceded by ESCAPE I, any of the
following characters will be sent without being changed at all: ↑, α↑, β↑, αβ↑,
αz, αβz, αZ, αβZ, and α_.  Special mappings exist for keys not on the keyboard
or trapped by the monitor.  They may be sent with bucky bits, and they have no
explicit graphic here or on ITS, as they are special function keys.  These are:

  ESC I    Function        ESC I     Function        ESC I     Function

  .        centered-dot    [TAB]     gamma           [LF]      delta
  [CR]     circle-plus     [BS]      integral        ∂         [NULL]
  λ        [BACK SPACE]    ≠         [CALL]          ∨         [BACK NEXT]
  α        [ESCAPE]        β         [BREAK]         ε         [CLEAR]

To simplify using the last three functions above (the bottom row shown), another
slightly different command format is used.  In this alternate form, instead of
using ESC I <char>, you use ESC n I, where n is a digit.  The advantage is that,
on a DD, the TOP key is not needed to use this form; and the three commands
defined below exactly parallel the last three above.

  Command  Function        Command   Function        Command   Function

  ESC 1 I  [ESCAPE]        ESC 2 I   [BREAK]         ESC 3 I   [CLEAR]
                     A6.8  FTP: The File Transfer Protocol


The FTP command is used to transfer files between WAITS and another network
host.  FTP can be used in two-ways: for a simple transfer, a single FTP monitor
command can be typed which contains all the information necessary for the
transfer, much like a COPY command; if several files are to be transferred, or
one of the less common protocol features must be used, the FTP command is first
used to establish a connection to a remote File Transfer Protocol server
program, and then you enter protocol commands to initiate transfers.  FTP can
also be used for file manipulation other than transfers at a remote host, e.g.,
directory listings and file renaming and deleting.

Note: There are actually two different user programs that provide file transfer
capabilities: one for the ARPAnet and one for the Ethernet.  However, the
monitor command FTP works for both networks, since the program run by this
command figures out which network you'll be using and swaps to the other program
if necessary.  Although the two programs provide almost identical features and
commands, there may be some differences (the Ethernet version is just becoming
available as we go to press).  The FTP documentation below officially describes
the ARPAnet FTP program; although you can generally assume the Ethernet version
is compatible, you might want to consult the latest documentation of the
Ethernet program by giving the monitor command READ PUPFTP<cr>.

Although the one-line FTP command is generally easier to use, this document will
start with the more detailed use of the protocol commands.  The reason for this
choice is that to use even the one-line command effectively, you should
understand some of the underlying protocol, which is more apparent in the
multiple command mode of using FTP.

The FTP command is used to set up a connection to a remote File Transfer
Protocol server.  It takes a host argument like Telnet, except that if a host
number is used it should be in decimal; to specify a nonstandard socket number,
the syntax is host#socket.  (The normal FTP connection is to socket 3.)  Once
the connection is set up, you can enter the following commands to the FTP
program.  Each command is a name followed by arguments as described below.  Only
the first four letters are significant (letters beyond four are ignored), and
commands may be abbreviated by enough letters to make the abbreviation unique.
Note that file specifications for remote hosts must follow the format
conventions of that host; they are passed on verbatim by FTP.  In particular,
the case of letters may be significant at some hosts.

Note: FTP command strings sent over the control link to the remote host are
subject to character conversion to conform with standard ASCII, as described in
the discussion of the Telnet programs above.  The processing of file data
depends on the transfer type; see the TYPE command below.

Some of the commands below are named the same as the corresponding command sent
over the network in accordance with the actual File Transfer Protocol; in some
cases alternate names are also defined.  Complete information on the protocol is
available in the network document with NIC number 14333, although there have
been several modifications to the protocol since that document was written.
There is also a "new" FTP which is not, so far at least, actually in use.

We do not implement all of the protocol options.  In particular, we accept only
MODE S (stream) and only STRU F (file).  Our server accepts MODE and STRU
commands but only with the above arguments; our user does not provide any way of
specifying mode or structure.

When the connection is first established, our user FTP program tries to
negotiate an appropriate type and byte size with the other end's server.  First
it sends TYPE I, and then BYTE 36.  If the latter is accepted but the former was
not, it sends TYPE I again.  (These commands are explained below.)  If these are
not accepted, it sends BYTE 8, and if that is accepted, TYPE A.  (All hosts are
supposed to accept BYTE 8.)  If nothing is accepted, the program tries again
after you give the USER command, in case the problem is that their server was
written by an obnoxious security freak as at a well-known system in Cambridge,
Massachusetts.

The protocol provides an abort function which can be used to stop a transfer
which is in progress.  This function can be requested in our FTP user program by
typing ESC I (from a non-display, type ↑← I).  This will send the abort command
only if there is a transfer in progress.  Many servers do not process the abort
sequence, but they should notice when we close the data connection.  You may end
up, if you are doing a STOR, writing an incomplete file on the other system.

In the file transfer commands below, the character = can be used instead of
either ← or → as shown, for the convenience of users at non-display terminals.

TYPE x   x is A, I, L, P, or E, and specifies the representation type for the
         data.  The uses of the various types are as follows:

TYPE A   ASCII type means that the file to be transferred contains text.  The
         characters in the file will be transferred to or from the WAITS
         character set, as explained for Telnet connections, and null characters
         will be ignored.  This type should be used to transfer text files to or
         from a machine with a different text representation.  Text files can be
         transferred to or from other PDP-10 systems more efficently using image
         type (below) if the few characters which are translated by ASCII
         translation are unused in the file, since our character code is almost
         the same as that of other PDP-10s.  ASCII transfers of local files will
         also eliminate the E directory or SOS line numbers, if any.

ASCII    is an abbreviation for TYPE A.

TYPE I   Image type means that the file is taken as a continuous stream of bits
         and sent accordingly.  The number of bits sent at a time is determined
         by the byte size set with the BYTE command (below).  The most efficient
         byte size for us is 36, the size of a PDP-10 word.  Any byte size which
         is a factor of 36 can be used with no difficulty, if needed to
         accommodate some other system.  Byte sizes of 8 or 32, however, cause
         extreme inefficiency because some bytes are split between two PDP-10
         words.  If you are retrieving a file from an 8-bit or 32-bit system,
         you might want to use TYPE L (local byte), which uses only the first 32
         bits of each PDP-10 word, and can therefore be implemented using the
         normal ILDB/IDPB instructions.  However, sending a file to such a
         system in local byte type will lose bits 32-35 of each word.

IMAGE    is an abbreviation for TYPE I.

TYPE L   Local byte type, as explained above, treats the file as normal PDP-10
         bytes of the size specified in a BYTE command.  For byte sizes which
         are a factor of 36, this is treated exactly the same as image type
         (above); for byte size 8 or 32 it uses only bits 0-31 of each PDP-10
         word.  Byte size 32 is more efficient than 8 in this type.

LOCAL    is an abbreviation for TYPE L.

TYPE P   ASCII print type is treated by our system the same as ASCII type.  This
         isn't right, but the protocol is not consistent about what to do.  Some
         people interpret this type as indicating that the file contains FORTRAN
         style format control characters.

TYPE E   EBCDIC type is not implemented here.  It is used for transferring text
         files between two IBM systems.  To transfer a text file between here
         and an IBM system, use TYPE A; the IBM system will translate between
         ASCII and their local character code as needed.

TYPE X   This command to our FTP user program does not correspond to a real data
         type in the protocol.  Instead, it is treated as TYPE L here but tells
         the other end TYPE I.  Use this command if you are talking to an 8-bit
         machine and want to use local byte type, but the other machine does not
         accept the TYPE L command.

BYTE n   n is a (decimal) number indicating the byte size of the network data
         connection.  Data will be sent from one host to another in bytes of
         this size, for image type and local byte type transfers.  ASCII
         transfers always use a byte size of 8.  (That is, each 7-bit local
         character code is translated into an 8-bit network ASCII code and vice
         versa.)  The allowable byte sizes are 8, 32, and any factor of 36 (1,
         2, 3, 4, 6, 9, 12, 18, 36).  In general, the largest byte size which
         will work is the most efficient.  (Note: the protocol specifies that it
         is the responsibility of the user FTP to ensure that 8-bit bytes are
         used for ASCII transfers.  Accordingly, our user FTP program does not
         necessarily transmit a BYTE command as soon as the user types it;
         instead, the byte size in the command is remembered for use in binary
         transfers, and a BYTE command is sent to the FTP server whenever
         necessary as the transfer type changes.)

USER x   x is a string which the foreign host will recognize as a valid user
         description, user name, or ppn.  Not all hosts require a user name.  If
         the server requires a password to complete the login procedure, the
         user program will ask for the password and turn off echoing while you
         type it.  Not all hosts require a password.

LOGIN x  is a synonym for USER.

ACCT x   x is an account number.  Some hosts may require this for their
         billing/accounting purposes.

XCWD x   x is a user name, as in the USER command, which will be used as the
         default directory for foreign file specifiers; the effect is like the
         ALIAS monitor command here.  The command name stands for change working
         directory.

ALIAS x  is a synonym for XCWD.

RETR x←y This command retrieves a file from the foreign host.  x is a local file
         specifier, and y is a foreign file specifier.  The foreign file y is
         copied to the local file x.  Current settings (or default values) are
         used for byte size and representation type.  The x← string is eaten
         locally, and the RETR y part is transmitted to the foreign host.

GET x←y  is a synonym for RETR.

TTY x    is a version of RETR which uses x as the remote file specifier, and
         types the retrieved file on the user's terminal.

STOR x→y STOR means store, and this command is the inverse of the RETR command.
         A local file x is copied to a foreign host where it is given the name
         y.

SEND x→y is a synonym for STOR.

APPE x→y This command will append the local file x to the end of the foreign
         file y.

PICKUP   This command is used to resume an interruped multiple file transfer and
         is explained further below.

LPPN     This command selects local PPN mode, which means that a PPN in square
         brackets is taken as a local WAITS PPN when appearing in a
         single-pathname transfer command; see the section on multiple file
         transfer, below.

RPPN     This command selects remote PPN mode, which means that anything in
         square brackets is assumed to be part of the remote filename when
         appearing in a single-pathname transfer command; see the section on
         multiple file transfer, below.

MAIL x   x is a user ID (like our programmer name).  Following this command you
         are expected to type in a message which will be mailed to the specified
         user at the foreign host.  The message must be terminated with a line
         containing only a period.  The MAIL program (see Appendix 4) is a much
         better way to send network mail.

MLFL x→y In this case x is a local file specifier, and y is a foreign user ID.
         The text of the specified file will be mailed to the specified user.
         The MAIL program is to be preferred over this command.

XSEN x   is like MAIL, but the message is sent to the remote user's terminal if
         he is logged in, like the SEND monitor command on WAITS.  This command
         and the two following ones are only implemented at a few network hosts.
         The SEND monitor command uses this protocol if a network destination is
         specified (the SEND command is to be preferred).

XSEM x   is like XSEN but mails the message instead if the user is not logged
         in, like the preferred SEND/YESMAIL monitor command.

XMAS x   is like XSEN but mails the message also, whether or not the recipient
         is logged in, like the preferred SEND/MAIL monitor command.

LIST x←y y is a foreign pathname, possibly including wildcard terms.  The
         directory listing of the specified pathname is stored in the local file
         x.  If x← is omitted, the listing is typed on your terminal.

DIRECT   is a synonym for LIST.

NLST x←y is like LIST, but the listing returned is guaranteed to have no
         extraneous information in it, simply one full pathname per line.  This
         listing is intended to be read by programs rather than humans, but if
         you really want it....

HELP     This command asks the foreign FTP server to send back a message
         indicating what commands it takes, etc.

STAT x   If x is omitted, this command asks the FTP server to send back
         information regarding the FTP connection, e.g., socket numbers.  If x
         is a directory name at their host (like our PPN), it lists that file
         directory.  Note: contrary to protocol, most servers (including ours)
         treat a STAT with no argument as a request for a listing of the
         directory specified in the USER or XCWD command.

DELE x   x is a foreign file specifier.  The specified file is deleted at the
         foreign host.

RNFR x   x is a foreign file specifier.  This command is short for rename from;
         it must be immediately followed by a RNTO.

RNTO x   x is a foreign file specifier.  This command completes the file rename
         operation started by RNFR.  (Some hosts accept * for wildcard
         specification in these commands.)

QUOT x   x is any character string, which should be an FTP command with
         arguments.  The string is sent as is over the FTP control link (see
         protocol, NIC 10596, for terms).  QUOT was included to allow you to
         execute commands which are as yet unimplemented here, or which are
         nonstandard, specific to some serving host.  It will be of little use
         for those commands which require some special action by the FTP program
         at this end.

BYE      Terminate connections with the foreign host and quit.

QUIT     is a synonym for BYE.

DISC     is a synonym for BYE.

XIND x   x is a local file specifier.  The file will be read and processed as
         FTP commands.

META-I   This is like XIND; it will prompt for a local filename and then read
         that file as a sequence of FTP commands.
                          A6.9  Multiple File Transfer


The RETR and STOR commands have some provisions for more convenient transfer of
groups of files when similar names are used at both ends.  The normal format of
the commands requires the user to specify two file names, one for our local file
system and the other for the remote host's file system.  Our FTP knows enough
about the filename syntax for certain systems (mainly the PDP-10 systems: ITS,
TOPS-10, TOPS-20, and TENEX) to be able to extract a local filename from a
remote one.

If only one filename is given in a RETR or STOR command, it is scanned to
determine both the local and the remote file specification.  Normally (in local
PPN mode), the entire file specification is sent to the remote host except for
anything inside [square brackets], which is taken to be a local WAITS PPN.  In
remote PPN mode, everything is sent to the remote host, and your own login or
alias PPN is used for the local file.  Here are the rules for determining the
local file specification:

  1. A "token" in these rules means a string of letters, digits, and the
     characters - and @.  An asterisk (*) may be used alone as a token to
     indicate wildcard file groups, as explained below.  If talking to one of
     the ITS systems at MIT (MIT-AI, MIT-ML, MIT-DMS, and MIT-MC) then a period
     (.) which follows a non-token character (space or punctuation) is taken as
     the first character of a token; such a token may also end with a period.

  2. If talking to one of the ITS systems, then a single left or right broket (
     < or > ) may be used alone as a token, which will be completely ignored.
     Otherwise, a token enclosed in brokets is ignored.

  3. One or more tokens separated by commas, enclosed in square brackets ( [ and
     ] ), are ignored in remote PPN mode, as explained above; in local PPN mode,
     there must be only one or two such tokens, and they must form a valid WAITS
     project name or PPN.

  4. Any characters following a semicolon (;) are ignored, except for the ITS
     systems, for which the token preceding the semicolon is ignored.

  5. A token followed by a colon (:) is ignored.

  6. A single non-ignored token is taken as the local filename.  Two such tokens
     separated by a period (.) or separated only by one or more spaces are taken
     as the local filename and extension.  The characters - and @ in a token are
     ignored, and the token is truncated to six or three characters for the
     local filename or extension.  (The leftmost six or three characters are
     used.)  A period which is taken as a token constituent, when talking to an
     ITS system, is ignored for local purposes.  If two or more non-token
     periods are used in the filename, the token after the first period is taken
     as the extension, and tokens after the remaining periods are ignored.

  7. No punctuation characters may appear in the filename string except the ones
     mentioned above.  Spaces may be used anywhere except within a token.

The FTP program notifies the user whenever it determines the local file name
from the remote one in this way, and, in the case of RETR, checks to see if that
file already exists before writing it.  If there is such a file, the user is
told so and can choose from these options:

     Type <cr> to overwrite the file.

     Type <lf> to overwrite the file and to automatically overwrite any other
     file requested that already exists, without any further warnings for the
     remainder of the FTP connection.

     Type <alt> to abort the transfer.

     Type CONTROL-<alt> to abort the transfer and to automatically abort any
     future transfer that would have to overwrite an existing file.  This will
     apply during the remainder of the FTP connection.  Files not written
     because of this will be named as being skipped because they already exist.

     Type another filename to write a different local file.

If this syntax is used, the implied local device is DSK.  (Note that device
field in the remote file specification is ignored for local file purposes.)  To
use a different device the local=remote syntax must be used.

A local filename or extension of * either in an explicit local file
specification or as determined from the remote specification is used to request
the transfer of more than one file by a single command. Wildcard device or PPN
is not allowed.  If an explicit local file specification is used, it should
agree with the remote file specification in which components are wild, e.g., the
command

RETR *.EXT=<THEIRDIRECTORY>FILE.*

will store any file(s) retrieved with local filename FILE.EXT, probably not the
desired effect.  Note also that an explicit local file specification with no
filename or extension implies *.*, so the command

RETR [PRJ,PRG]←REMOTE.FILE

will be treated unnecessarily as a multiple retrieve.  This will work but will
involve unnecessary operations.  The desired effect can be obtained in local PPN
mode simply by typing

RETR REMOTE.FILE[PRJ,PRG]

which will take the PPN as applying to the local output file, and will send only
the filename and extension to the remote host.  In remote PPN mode, it is
necessary to repeat the filename:

RETR REMOTE.FIL[PRJ,PRG]=REMOTE.FILE

There is no corresponding local/remote switch for device names, which are always
considered remote.  Therefore, you must say, e.g.,

RETR UDP1:REMOTE.FIL←REMOTE.FILE

to avoid causing a multiple RETR.  The TTY command can be used to avoid having
to repeat the filename for the specific case of device TTY.

In the case of multiple STOR, the selected files are found in the user's local
file directory and a STOR operation is performed for each file found which
matches the template.  The remote file specification is scanned for each
operation and the character * is replaced wherever seen by the local filename or
extension.  (The first * is replaced by the local filename unless the character
. (or, for ITS hosts only, space) precedes it, in which case the local extension
is used.  A second * is replaced by the local extension.)  If the end of the
specification line is seen before any replacement has been done, the local
filename and extension are inserted before the carriage return as if *.* had
been seen there, so that a command like

STOR *.SAI=<DIRECTORY>

will work.  In this situation the filename and extension will be separated by a
space for ITS hosts or a dot otherwise.  No great effort is made to ensure the
syntactic correctness of the resulting remote file specification; presumably the
remote host will complain if necessary.

For a multiple RETR, the remote file specification is used exactly as typed in
an NLST operation, the results of which are saved by the FTP program to be used
in successive RETR operations.  Note that the string used as the NLST argument
starts immediately after the = or ←, if any, or after the space terminating the
RETR or GET command name.  In particular, any extra spaces will be sent to the
remote host.  The remote file specification in the typed command is not used to
determine local file names; instead, the rules above are applied to each remote
file specification received from the NLST operation.  If an explicit local
filename or extension is provided by the user, it will be used instead of the
one derived from the remote filename, as in the command

GET *.TXT=<IGNORED>*.THIS-NAME-IS-REPLACED-BY-TXT-LOCALLY

Multiple RETR depends on the remote host implementing NLST.  At present this
command is implemented in both TENEX and ITS.  TOPS-10 systems vary in which
commands they implement.  Other systems may have a filename syntax which does
not follow the rules above, in which case none of the features in this section
will work.

The PICKUP command can be used to continue a multiple transfer which is
interrupted either by a transient network failure or by a user error (e.g.,
attempt to write into a protected file).  The command permits the transfer to be
re-entered along with the (local) name and extension of the file with which the
transfer should resume.

Suppose that you are trying to copy a complete directory from another system,
let's say a TENEX, so you give the command

RETR <FOO>*.*

After several files have been retrieved, the connection is broken, while in the
middle of copying <FOO>PARTIALLY.COPIED into PARTIA.COP in your directory.  You
re-establish the connection, and type

PICKUP PARTIA.COP

at which point you are invited to repeat the RETR command, which will ignore all
files presented by the remote host until one comes along which matches the name
PARTIA.COP, at which point it begins actually reading files.

If the multiple transfer is stopped because of an error which does not break the
network connection, so you can continue using the same FTP, you can give the
PICKUP command without a filename argument, in which case the last filename for
which a transfer was attempted is used.  Also, after the PICKUP command, you can
just type <return> instead of repeating the STOR or RETR command, and the last
such command given will be repeated.  The last transfer must have been a
multiple STOR or RETR.

If the PICKUP command line ends with <alt> instead of <return>, the first file
transferred will be the one after the one in the argument (or the one after the
one remembered from the aborted transfer).  This is useful for the case of a
transfer which cannot be done because of a protection violation, when you want
to continue the multiple transfer, skipping the protected file.  In a situation
like that, you may not know the name of the first file you want to transfer, but
only the name of the last file you don't want to transfer.

If a PICKUP command is given after a transfer which is not multiple but for
which an implicit local filename was used, e.g.,

RETR <FOO>FILENAME.EXTENSION

which implicitly specifies FILENA.EXT as the local name, then the PICKUP command
with no argument can be used to repeat the transfer.
                         A6.10  One-line FTP transfers


The format for using the FTP command to carry out a transfer all in one command
line is this:

FTP local ← {host} remote
FTP {host} remote → local
FTP local → {host} remote
FTP {host} remote ← local

The braces are really to be typed; they're not meta-symbols.  The direction of
the arrow indicates the direction of the transfer; the first two examples
retrieve files from the remote host, and the last two store files at the remote
host.  Therefore, the arrows may not be replaced with equal signs as in the
multi-command syntax.  The pathnames may include * for multiple transfers.

Although there must be an arrow, either of the pathnames may be null, in which
case the other one will be used for both ends as in the RETR or STOR commands
with only one pathname.

Normally FTP will attempt to do the transfer in IMAGE mode.  If you want ASCII
mode transfer, give the command as above, but with FTP/A instead of just FTP.
If the remote host will not accept the specified mode, the transfer is aborted
and you can try negotiating manually.

Other switches can also follow the FTP command: /R changes the mode for parsing
a single pathname from LPPN to RPPN; /T is like the TTY command in multi-command
FTP--it types the specified remote file on your terminal (no local pathname or
arrow is used with /T); /Q means don't ask for confirmation when overwriting a
file that already exists--just go ahead and overwrite the old version with the
new file.

After doing the transfer successfully, FTP will close the connection and exit.
So if you want to do several transfer commands, it pays to use the multi-command
syntax.

The host specification inside the braces can contain more than just a host name.
Many hosts require a login sequence before files can be transferred; the
parameters for this login are supplied in the host specification like this:

{hostname/user/acct}

This can be abbreviated to just {hostname/user} or {hostname}.  If no acct is
given, no ACCT command will be sent; if no user is given, the commands

USER ANONYMOUS
PASS SAIL

will be sent.  These are the standard FTP guest login for Tenex systems.  If you
do include a user name, and the remote host asks for a password, you will be
asked to supply it with echoing off.

If you often use a particular host-user-acct combination, you may want to store
the information online instead of typing it in each time.  To do this, include
in your OPTION.TXT file one or more lines of the form

FTP: {host/user/acct},{name:host/user/acct/pass},{host/user//pass}

As you see in the example, the format allowed in OPTION.TXT has more fields
allowed than the one typed in the command.  One difference is that you can
include a password, if you don't mind taking the risk of storing your passwords
online.  (You can have a password but no acct as shown in the last host in the
example.)  Also, there is a "name" field which may begin the host specification;
if no name is given, the first field serves both as name and as host.  The way
to refer to a stored host specification is to type {name↑} in the monitor
command line.  Note that this name must exactly match the one in OPTION.TXT,
except for the case of letters.  (Normally, a host name can be abbreviated to
enough letters to determine it uniquely.)  For example, suppose the host SRI-KL
can be abbreviated SRI.  Then these commands are equivalent:

FTP ←{SRI/NICGUEST}<NETINFO>LIAISON.TXT
FTP ←{SRI-KL/NICGUEST}<NETINFO>LIAISON.TXT

but if your OPTION.TXT file contains the line

FTP:{SRI/NICGUEST}

your command must be {SRI↑} and not {SRI-KL↑}.
                        A7  CARE AND FEEDING OF DEVICES
                                 A7.1  DECtapes


To mount a DECtape, first assign an available drive.  Drives are identified to
the system by a rotary switch labeled 1,2,...,8 corresponding to DTA1, DTA2,
etc.  Although there are eight numbers on the switches, there are only four
drives, and the system will not recognize DTA5 and up.  Generally you should
have no reason to change the normal setting of these switches.  Place your tape
on the left reel of the drive and thread the tape over the top of the tape guide
and head assembly.  Wind several turns of the tape onto the takeup reel (turn
the reel clockwise).  Finally flip the OFF-WRITELOCK-WRITE switch to WRITE LOCK,
or if you want to write, to the WRITE position.

To unload the tape, wind the tape off the takeup reel by the direction switch
(push it to the left and hold it).  Turn the drive off when all the tape is on
the left reel.  Grasp the reel firmly and pry it off the hub.
                              A7.2  Magnetic Tapes


Our magnetic tape drives are seven-track.  They are capable of operating at
densities of 200, 556, and 800 bits per inch; the default is 556.  DART always
uses 800 bpi.

First, decide whether you want to write on the tape or not.  If you intend to
write, place one of the plastic write-enable rings in your tape.  Place your
tape on the top hub and twist the handle in the hub clockwise to tighten the
reel to the hub.  (You can really lose if you don't tighten it all the way!)

Between the two reels there is a three-position switch labeled START-BRAKES.
Move the switch to the right and hold it there to release the brakes on the
hubs.  Unwind the tape until the end of the tape is about a foot from the floor.
Carefully thread the tape into the slot between the reels to the left of the
brake release switch.  Wind the tape onto the bottom reel (wind the reel
clockwise).  You must be holding the brake release switch to the right to wind
the tape.  Wind several feet of tape onto the takeup reel until you see the
metal foil load point marker go by.  Make sure there is no slack in the tape and
then push the brake release switch to the left (the START position).  The tape
will hiss and spin.  Hold the switch in START until all motion stops.

There are some control buttons on the top panel.  One is labeled (and lighted)
REMOTE-LOCAL; this button toggles.  In LOCAL mode, push the REWIND button.  If
you're not sure that you have the load point marker on the takeup reel, push the
FORWARD button for several seconds to wind the tape forward onto the takeup reel
until it passes the load point marker, then REWIND.  REWIND positions the tape
at load point.  Set the drive in REMOTE and it is all set to use.

Unloading the tape is simple.  In LOCAL mode, push the REWIND button.  When the
tape is finished rewinding, push the brake release switch and manually wind the
tape onto the top reel.  Unscrew the hub and remove the reel.

The magnetic tapes are quite finicky and the system software is somewhat flaky.
There are several things that you can do with mag tapes that will upset the
timesharing system and require the intervention of a wizard who will be angry at
you for disturbing his slumber.  Never stop your job when it is operating the
tape by typing CALL.  Instead, the job can be stopped by causing the magnetic
tape to appear hung.  This is done by switching back and forth between REMOTE
and LOCAL until the system stops the job.

There is a reset button for each tape drive located behind the small front panel
below the drive mechanism.  This button clears all tape motion functions in a
reasonable way.
                       A7.3  XGP: Xerox Graphics Printer


The normal condition of the XGP is indicated by the green ON light and the
orange READY light being on.  If all indicators are off, the XGP main power has
been shut off inside the cabinet, possibly for some reason.  Please do not try
to fix the XGP unless you have been officially shown how to do the particular
task necessary.  This includes changing the paper or web.  It is easy to screw
up the XGP.  To be trained on XGP maintenance, just ask a wizard.

If the red OFF light is on, push the ON light.  This will turn the XGP on,
unless some abnormal condition obtains, such as a paper jam near the cutter.

If the orange STANDBY light is on or if the READY light is off, look inside the
panel above these indicators.  The following is the normal state of the
indicators and switches within:

        Knobs:  TEST PATTERN:           OFF
                VERTICAL POSITION:      leave this one alone

        Lights that should be on:
                All POWER SUPPLIES lights
                        (except 10kv and 2.5kv lights will
                        be off any time there is some other
                        problem)

                All PROCESS INTERLOCK lights

                All CONTROL LOGIC (except IN SYNC)

        Lights that should be off (all are labelled "not used"):
                All SUPERVISORY SIGNALS
                FAULT
                IN SYNC



Certain conditions of the XGP are indicated by lights being OFF.  (If any of the
conditions listed below obtains, the 10kv and 2.5kv power supplies will shut
off.)

        FWT     Filament wait timer has not run long enough after 
                being turned on.  Wait 2 minutes.

        FUSER   The fuser is not hot enough.
                If the XGP has just been turned on, wait 5 minutes;
                otherwise, reset the over-temperature sensor.
                The over-temperature sensor is reset by a small
                black button located somewhere in the middle of the
                fuser wick assembly.

        WEB CLEAN
                The drum cleaning web must be replaced.

        PAPER OUT
                Load more paper.

        DRUM    The drum assembly has been disengaged.

        SWEEP PRESENT
                The interface is not providing a sweep signal.
                This may mean the connector is unplugged or the
                interface turned off.

To load a new roll of paper, open the left door of the XGP.  Unscrew the roll
retainer and remove the old roll.  Unwind a foot of paper from the old roll and
then cut the paper at the roll.  Mount the new roll, screw the roll retainer
back on, and then tape the front end of the new roll to paper separated from the
old roll.  Make the leading edge of the joint as smooth as possible.  Using the
MOTOR MANUAL DRIVE button, advance the splice through the machine until it has
passed the cutter.

If any problems develop in this sequence, find a wizard.  Beware: certain parts
of the XGP are hot; you can be painfully burned if you touch the wrong things.

There is a drum cleaning web that runs out at inconvenient times.  There is a
small diagram inside the XGP explaining how to change the web.

Toner is icky black stuff that makes the marks on the paper.  It gets used up
and runs out too.  Someone is supposed to check the toner every day and add more
if it gets too low.  If the XGP runs out of toner, the pages will start getting
lighter, there will be occasional black splotches on the paper, and frequent
sand-like particles will be found embedded in the paper.  Toner is checked
through the access panel in the back of the XGP.  There is a lever there that
adjusts the rate at which toner is used on the paper.  This lever must be placed
either at the lightest (inner) setting or one setting darker.  Never, never set
it anywhere else.

If you don't like the copy quality, complain to a wizard.  Don't adjust things
yourself.
                           A7.4  UDP: User Disk Pack


One or more of the drives in the disk system are usually reserved for private
disk packs, called user disk packs or UDPs.  Any drives so designated will bear
a green marker card labeled UDPn, where n is 1,2,3....  There are three things
you have to do in order to use a UDP.  (If the disk pack you want to use is
already spinning on a drive, you can skip steps 1 and 2 below and go right on to
step 3.)

(1) Remove the previous disk pack, if any, from the drive, after making sure no
one is using it.  (If there is no pack on the drive, you can go right on to step
2.)  To see if anyone is using UDPn, give the RESOURCES command; if this command
lists UDPn free, then you are allowed to remove the previous pack from that
drive.  To unload the pack, first make sure there is nothing on top of the clear
door of the drive.  Then push the START-STOP switch to STOP.  When the pack
comes to a stop, press the OPEN DOOR switch; the door will swing up.  (If it
doesn't, push down lightly on the door and it should open.)  Take the top cover
whose label corresponds to the label on the pack and place it carefully over the
pack, pushing down gently until you're sure it won't go down any further.  Turn
the handle counter-clockwise until it moves freely.  Lift the pack straight up
out of the drive, and gently close the door to the drive until it locks.  Place
the bottom cover under the pack and press it on until it latches (it may help to
squeeze the bottom release as you put it on).  The covers help keep dust off the
packs.  Return the pack to the storage rack, with the label facing outwards.

(2) Before you mount your pack, you must make sure that the UDP is free, even if
you already did that once in step 1 above.  Now that no pack is mounted on the
UDP drive, give the RESOUCES command and make sure it still says UDPn free for
the particular drive you're about to use; if it doesn't say that, don't mount
your pack, or else it may get clobbered with data intended for some other pack.
If UDPn is free, mount your pack by following this sequence.  Make sure there is
nothing on top of the clear door of the drive you are using.  Then push the
OPEN DOOR switch and the door will swing up.  Hold your pack by the handle on
its top cover and remove the bottom cover from the pack by squeezing the two
handles on the bottom together.  Place the bottom cover on top of the back part
of the drive cabinet.  Place the pack (still in the top cover) in the drive
unit, gently lowering it straight down on the hub in the middle.  Make sure that
the pack is all the way down by gently rocking the cover to see if it will go
down any further.  Now turn the cover's handle clockwise.  It will be slightly
stiff to turn.  Turn until it stops, but do not tighten any further; the stop
will be very obvious.  Now carefully pull the top cover straight up off the pack
and gently close the drive door until it locks.  Place the pack cover on the
bottom cover, making sure the two covers are aligned to keep dust out of the
enclosed space.  Turn the empty covers so that the label on the top part is
visible from the front of the drive.  Push the START-STOP switch to START; the
pack will begin to spin.  When the green ready light comes on, the pack can be
used.  There is a READ ONLY-R/W switch on the drive; put this switch in the
READ ONLY position if you do not intend to write anything on the pack and put it
in R/W (Read/Write) if you do intend to write on the pack.

(3) Now that your pack is mounted, you must assign the UDP with the command
ASSIGN UDPn.  This should never be done before removing the previous disk pack
from the drive because that can cause the system to get confused about which
pack is mounted, with the possible result of your pack getting clobbered with
data intended for the previous pack.  For details of the ASSIGN command and its
different forms, see page 51.

After you have finished using the UDP, you should deassign it with the command D
UDPn.  This will allow others to use the drive with their own packs.  You should
also put your pack away if you don't expect anyone else to use it.

Occasionally, there may be no drives available for user disk packs.  If this
happens, a wizard will explain why.  Never touch a disk drive bearing a red
marker card!  All user drives have green cards bearing a UDPn indication.  If
you are confused by something you see, ask about it before you touch!
                           A8  MONITOR ERROR MESSAGES


This appendix explains the error messages typed by the WAITS monitor itself (not
by system programs).  Many have to do with errors induced by UUOs in your
program, for which you may want to see the UUO Manual writeup of the UUO
involved.  The list is alphabetical; messages which start with a variable part
are sorted under the first fixed word.

Note: Several of these messages are of the form XXX at user <address>.  It is
possible in some of these cases to get XXX at exec <address> instead, which
means that the offending instruction was not in your program, but in the
monitor, which was trying to do something on your behalf when it happened.  If
this happens repeatably, or if the message is shortly followed by a system
crash, tell a system programmer.

Address check for Device <dev>
          Your program was trying to use the indicated device, and supplied a
          buffer address, dump mode command address, or other address which is
          outside the bounds of your core image.  For dump mode IO, the command
          list is too long or contains a loop, or the address of a word in the
          command list is illegal, or the address pointed to by a word in the
          command list is illegal (possibly because it points into a
          write-protected upper segment).  In buffered mode IO, the buffer
          header address is illegal or the buffers themselves are improperly
          formed.

Address out of bounds, UUO at user <address>
          Your program executed a UUO which takes as an argument an address in
          your core image, and the address was out of bounds.  The address given
          is that of the offending UUO.

All of the user's TTYs are busy
          You gave a TALK command with a programmer name as argument, but each
          terminal in use by that person is unavailable for TALKing to.  You
          should probably SEND the user a message asking that he TALK to you.

Already assigned to job <job number>
          You typed an ASSIGN command, and the device you wanted is in use.

Already attached!
          You gave an ATTACH command with your own job number as argument.

Already in use - can't change format
          You gave an ASSIGN PUBLIC or ASSIGN PRIVATE command for a UDP which
          was already assigned as OLD, or vice versa.  The UDP will be assigned
          to your job in the same mode as before.

Already in use - can't make private
          You gave an ASSIGN PRIVATE or ASSIGN OLD command for a UDP which was
          already in use by another job.  The UDP will be assigned to your job
          as PUBLIC.

? ambiguous job name
          Your program gave a UUO which refers to another job by name, and there
          are two or more jobs with that name.  If you type CONTINUE, the UUO
          will be tried again.

Attaching job <job number> away from <TTY name>
          You gave an ATTACH command to attach a particular job to your
          terminal, and that job was formerly attached to the terminal given in
          the message.  A message has been typed on that terminal saying who
          attached its job away.

Attempt to initiate SPW job with one already running
          Your program has a spacewar module active and is trying to start
          another one.

;; Autologout
          Your job was idle too long and has therefore been logged out
          automatically.  Autologout is described on page 5.

Bad directory for Device <dev>
          The device is a DECtape.  This might mean that the tape is in a format
          not recognized by the monitor.  (Our system uses a different directory
          format from the PDP-10 standard.)  It can also happen if you try to
          write on a write-locked DECtape.  Or it can happen if the DECtape
          drive isn't working very well (this is typical of our DECtapes).

Bad retrieval
          The pointers to a disk file you tried to reference are invalid.  See a
          system programmer to try to fix it, or report the filename via GRIPE.

Buffer too large for Device <dev>; UUO at user <address>
          Your program is trying to use an I/O device for which there is a limit
          on the allowable user buffer size, which you exceeded.  The UUO Manual
          explains the rules for each device.

busy
          You gave a TALK command addressed to a terminal which is not available
          for talking.  See the TALK command on page 53.

;; Bye from PRG
          You are in a TALK ring which formerly had at least three people.  One
          of these people, the one named in the message, has left the ring.

Can't attach device
          You gave the privileged ATTACH <device> command and don't have the DEV
          privilege.

Can't Attach job
          You tried to attach a system phantom job (one which is not logged in).
          This requires the ATT privilege unless you are logged in with the PPN
          of the phantom (attaching a SYS phantom always requires the ATT
          privilege).

<dev> can't be reassigned
          You gave a REASSIGN command in which the device to be reassigned was
          your own terminal.  This is illegal.

Can't continue
          You typed CONTINUE after one of the other error messages came out, and
          you are not allowed to continue the job after that error.  You also
          cannot continue a job after a SAVE or SSAVE.

Can't detach device
          You gave the privileged DETACH <device> command and don't have the DEV
          privilege.

Can't detach TTY.  Use "TTY NO EXIST nnn" instead.
          You gave a DETACH <TTY name> command, but the DETACH command cannot be
          used with terminals.  Instead you can use TTY NO EXIST as shown.  This
          should generally only be done by wizards or their helpers.

Can't ENTER or RENAME MFD
          If you get this message, see a system programmer, who will eat you.

Can't FINISH phantom.
          You gave a FINISH command with a job number argument, and the job is a
          system phantom job.  This requires the ATT privilege.

Can't LOCK with segment
          Your program, which has an upper segment, gave a LOCK UUO.  This is
          illegal.

CORE DEADLOCK.
          The monitor's free storage area has expanded enough so that user core
          is no longer big enough for your core image.  This shouldn't happen
          unless we are running with reduced memory.  If it does happen, it
          might fix itself if you wait a while, but if you must run immense
          programs your best bet is to come back at 4am.

Couldn't get you a segment.  Will try to let you win with SETPR2.
          You tried running a program with an upper segment.  The program was
          loaded into core, but there is no room in the monitor's job tables to
          make an entry for the upper segment.  The monitor will try to simulate
          an upper segment for you by leaving the upper segment code in your
          lower segment, but simulating upper-segment relocation by the SETPR2
          UUO mechanism.  This ought to work okay for most two-segment programs,
          but just in case it doesn't the monitor types this warning.  If you
          are writing a two-segment program, consult the UUO Manual or a system
          programmer for advice.

Couldn't unpurify upper.  Continue to try anyway
          You typed a DDT command.  JOBDDT in your core image points to an
          address in your upper segment as the DDT starting address, and your
          upper segment is write protected.  DDT and RAID both contain
          instructions which modify themselves.  The monitor tries to solve this
          by unprotecting your upper segment.  If you are sharing the segment
          with other users, it has to load a new copy for you so the other users
          still have a protected one.  This might fail, for example, because
          there are no job slots available, or for other reasons.

<dev> deassigned, but still INITed
          You gave a DEASSIGN command for a device which is in use by your
          program.  This is all OK; the monitor is merely reminding you that you
          still control the device.  The FINISH command will release it, if that
          is what you want.

Detached from system
          You gave the PJOB <dev> command and the device you specified has been
          made unavailable to users, perhaps because it is not working.

Detaching job <job number>
          You gave a command to attach to a job although you were already
          attached to another job.  Your old job, whose number is given here, is
          detached for you before the new job is attached.

Device <dev> isn't ready
          The device is somehow disabled.  If it's a mag tape, it may be in
          LOCAL mode.  You can fix the problem and type CONTINUE.

Device <dev> may be unloaded
          You gave a DEASSIGN command for a UDP, or your program released the
          UDP, and no one is now using the UDP so you can unload the pack.

? Device <dev> not available
          The device specified in a RUN, R, GET, SAVE, or SSAVE command was
          unavailable to your job.

Device <dev> still in use - DON'T unload
          You gave a DEASSIGN command for a UDP, or your program released a UDP,
          but the UDP is still being used by someone.

Disk is FULL!
          Your program is trying to write a file on the disk, and there is no
          more free disk space.  If you delete some files (using another job!),
          you can then type CONTINUE to resume your program, although it will be
          given the error return for the UUO that was being tried.

DISK TRANSMISSION ERROR
          This is a disk failure.  See a system programmer.

Enter failed.
          The filename you typed to "Enter needed." (see below) didn't work,
          probably because of a protection failure.

? Enter failed
          The file specified in a SAVE or SSAVE command cannot be written,
          probably because of a protection failure.

Enter needed.  Please type file name:
          Your program tried to write on the disk or a DECtape without doing an
          ENTER UUO to specify the filename.  You are given the opportunity to
          specify a file.

ERROR IN DSKSER
          Horrible error in the monitor disk service routine.  See a system
          programmer.

? Error in job <job number>
          This message will appear along with one of the others.  The only
          reason you might need it is if you are running more than one job at
          once (through a PTY, for example).

Error in monitor
          This message sometimes occurs if you have clobbered your buffer
          headers for IO in buffered mode.  If it is followed closely by a
          system crash, call a systems programmer.

File already exists.  Is it OK to delete it?
          The filename you typed in response to "Enter needed." (see above)
          already exists.  If you type Y (and RETURN), it will be replaced with
          the new output; otherwise, you will be asked for another name.

Finish what?
          You typed a FINISH command with an argument and weren't using that
          device (or there is no such device).

Gotcha!
          This is not an error.  You get it when you are in a device wait queue
          and your turn for the device comes.

Halt at user <address>
          Your program executed a JRST 4, instruction.  You are allowed to
          CONTINUE the job after this message.  The address typed is the address
          containing the HALT instruction, not its effective address.  If you
          type CONTINUE, the program will be continued at the address specified
          in the effective address of the JRST 4,.

Hung Device <dev>
          The device did not respond properly to your attempt to use it in some
          predetermined time.  This probably means that the device is unusable
          for some hardware reason.

I-level UUO when not at I-level, UUO at user <address>
          Your program tried to execute a UUO which is only allowed in a user
          interrupt routine, but your program was not at user interrupt level at
          the time.

Ill mem ref at user <address>
          Your program tried to read or write an address greater than the size
          of its core image.  The offending instruction is at the address typed,
          or possibly at one beyond that address (e.g., if the error occurred on
          a non-final write cycle of a BLT instruction).

Illegal attach loop
          Your program is typing into a pseudo-teletype and gave an ATTACH
          command trying to attach its controlling job.  For example, people
          using the system via the network get this if they try to attach to
          their Telnet server job.

Illegal data mode for Device <dev>
          Your program has tried to use an I/O device in an undefined way, e.g.,
          binary I/O to a terminal.  The UUO Manual discusses data modes for
          each device.

ILLEGAL DD CHANNEL.
          Your program is trying to use a Data Disc channel to which it is not
          allowed access.

Illegal ESCAPE/BREAK char in PTWR1S/W UUO
          Your program tried to use a no-longer-supported feature of the PTWR1S
          and PTWR1W UUOs.  ESC and BREAK commands should now be done by using
          the TTYSET UUO.

ILLEGAL FORMAT DUMP MODE COMMAND LIST
          Your program is trying to do dump mode I/O incorrectly.  See the UUO
          Manual.

Illegal I-level call, UUO at user <address>
          Your program executed at interrupt level a UUO which is not legal at
          interrupt level.

ILLEGAL INSTR. ADDRESS.
          This message refers to instructions in a display program your job is
          running.

Illegal instruction at user <address>
          Your program executed an undefined instruction or one which is not
          allowed in user mode.

Illegal old-style access to new format UDP. UUO at user <address>
          You have given an ASSIGN OLD command for a UDP, and mounted a pack
          which has been formatted for file-structured use, and your program
          tried to write on the pack (gave an ENTER UUO).  You can't write
          new-format UDPs in OLD mode.

ILLEGAL PAGE SIZE SPEC.
          You are trying to adjust the page printer geometry incorrectly on a
          display terminal.

ILLEGAL PIECE OF PAPER
          Your program gave a PPIOT UUO which specified a piece of paper number
          greater than 17 (octal).  See the UUO Manual.

Illegal protection code
          You gave a SETUWP or CLRUWP command with an argument greater than 1000
          octal.

Illegal socket in terminate
          Your program accessing the network tried to close a connection but
          gave an invalid argument.

Illegal UUO at user <address>
          Your program executed a UUO which the monitor does not recognize.
          Possibly the UUO is privileged and you are not, or you may be trying
          to execute data.

Illegal user socket
          Your program is trying to access the network but gave an improper
          socket number.  See the UUO Manual for which socket numbers are
          available to each job.

IMP I/O without Request For Connection
          Your program tried to read or write data over the network but failed
          to open a proper connection first.

in use
          You gave the FLUSH command but the specified terminal is in use.  You
          can flush it anyway if you first say ENABLE UPG.

In use, will be detached when available.
          You gave the DETACH DDnn! command to detach a DD channel from the
          system, but that channel is currently in use.  When it is freed up by
          its current user, it will be detached automatically.

Input Device <dev> cannot do output
          Your program has done something silly like trying to write on the
          paper tape reader.

Input Device <dev> has no input buffer header, UUO at user <address>
          Your program executed an input UUO in buffered mode but had not
          provided an input buffer header when it opened the device.

Interrupt address out of bounds
          Your program has enabled user interrupts but specified an interrupt
          address which is not in your core image.

Interrupt enablings conflict, UUO at user <address>
          Your program tried to enable both old-style and new-style interrupts
          in a conflicting manner.

Intgen of non-enabled interrupt, UUO at user <address>
          Your program tried to use the INTGEN UUO to send itself or another job
          an interrupt for which the job was not enabled.

I/O to unassigned channel at user <address>
          Your program executed an I/O UUO specifying an I/O channel which was
          not opened.  See the UUO Manual about channels and I/O.

<dev> is busy, will you wait?
          Your program tried to open a device which another job is using.  If
          you say Y (then RETURN), your job is placed in a queue of jobs waiting
          for the device, and will be continued automatically when it's your
          turn.  If you say N, you are then asked "Would you do IO to the disk
          instead?" and can again say Y or N.  If you say Y, you may be asked
          for a filename (if your program does input or output on that channel
          without specifying a name).  If you say N again, your program gets a
          failure return on the INIT or OPEN UUO.

JMS NOT LEGAL; USE JSR.
          Your program set up a III display program with the forbidden JMS
          instruction in it.  See the UUO Manual.

Job capacity exceeded
          The maximum allowable number of users are already logged in.  Try
          again later.

Job too big to LOCK in core
          Your job tried to execute a LOCK UUO but is too big to fit in the
          lockable part of core.  Shouldn't happen unless we are running with
          reduced memory.

;; Link broken
          You were in a TALK ring with one other person and that person
          terminated the ring.

Logical name already in use, <dev> Assigned
          You typed an ASSIGN command with a logical device name argument which
          you were already using for another device.  The device you requested
          is assigned to your job, but the logical name still refers to the old
          device.

Login please
          You typed a command which requires that you be logged in to use it.

Lookup failed.
          The filename you typed in response to "Lookup needed." (see below)
          could not be read.  (It doesn't exist or is read protected against
          you.)  You will be asked to type in another name.

Lookup needed.  Please type file name:
          Your program tried to read from the disk or a DECtape without
          specifying a file by executing a LOOKUP UUO.  You are given the chance
          to specify the file to read.

Message length inconsistant with byte size
          Your program was attempting to read input from the network and got a
          net message whose length was not a multiple of whole bytes.

Must assign Device <dev>; UUO at user <address>
          Your program tried to INIT a UDP which hadn't been ASSIGNed.  You must
          give the ASSIGN command to set the mode of pack to be used before you
          can use a UDP.

Must specify TTY C100A or TTY C100B or ...
          You gave the TTY C100 command, but since there are different types of
          support for C100s, you must specify which type you (think you) have.

NCP already alive
          Your program tried to bring the system Network Control Program up but
          it was already up.

NEED ENTER BEFORE OUTPUT
NEED LOOKUP BEFORE INPUT
          You get these messages if your program opens a directory device,
          closes a file, and then tries to do input or output on that channel
          without another LOOKUP or ENTER.

No <dev>'s available
          You typed an ASSIGN command with a generic device name (e.g., MTA),
          and all such devices are in use.

No core assigned
          You typed a command which refers to your core image (e.g., DE or
          START), and you don't have a core image.

No DDT
          You typed a DDT command, and your core image does not contain DDT,
          RAID, or BAIL (JOBDDT is zero).

No other detached jobs with same PPN.
          You typed the ATTACH command with no argument, trying to attach a
          detached job of yours, and there was no such job to attach.

No Reenter address
          You gave a REENTER command and your program has no REENTER address
          (JOBREN is zero).

No starting address
          You gave a START, R, or RUN command and the program has no starting
          address (JOBSA is zero).

No such device
          You gave a device name but there is no device with the name you gave.

No such job
          You gave a command with a nonexistent job number as argument, e.g.,
          ATTACH, KILL, or TTY WHO.

No such privilege
          The privilege name specified in an ENABLE or DISABLE command does not
          exist.

No such TTY number
          You gave a TALK command with a TTY number higher than the biggest TTY
          number.

No upper segment
          You typed a SETUWP or CLRUWP command and your core image does not
          include an upper segment.

? Non-ex job name or number
          Your program gave a UUO addressed to a nonexistent job.  If you type
          CONTINUE, the UUO will be tried again.

Non ex mem at user <address>
          This means that your program tried to reference a word of physical
          core storage which does not exist.  This can happen if your program
          uses the GETHI UUO to map particular pages of physical core into its
          upper segment, including some physical page that doesn't exist.  But
          normally, this should never happen.

? not a dump file
          The file specified in a RUN, R, or GET command is not in dump file
          format.

NOT A NEW FORMAT UDP
          You have typed an ASSIGN PUBLIC or ASSIGN PRIVATE command for a UDP,
          and mounted a pack which has not been formatted for file-structured
          use.  The error is not detected until your program tries to perform
          some operation on the UDP.  See a system programmer about formatting
          your pack.

Not a TTY
          You gave the FLUSH command with an argument which is not the name of a
          terminal.  (Might be a nonexistent TTY number.)

<dev> not available
          You gave a RUN, R, GET, SAVE or SSAVE command with a specific device
          name, and that device is in use by someone else and not available to
          you.

Not enough core
          You typed a CORE command with an argument greater than the maximum
          core currently available to a user job.

Not enough free storage for TV camera
          Your program tried to use the TV camera (device TV) and there is not
          currently enough free storage to hold a complete picture.  Maybe
          you'll succeed later.

? <filename> not found
          The file specified in a RUN, R, or GET command was not found.  If the
          problem is not a spelling error, make sure you are not aliased.

Out of bounds
          Some numeric argument to a monitor command wasn't right.  This could
          be an address not in your core image in a DE or E command.

Output Device <dev> cannot do input
          Your program has tried to do something silly like read the paper tape
          punch.

Output Device <dev> has no output buffer header, UUO at user <address>
          Your program executed an output UUO in buffered mode but did not
          provide a buffer header when it opened the device.

? <n> pages of core needed
          You tried to run a program and asked for less core than it needs to
          run or for more core than a single job can have.  In either case, <n>
          is the minimum amount of core (in 512-word pages) needed to run the
          program, unless the program was on a mag tape, in which case <n> is
          the amount of core you asked for and is more than you can have.

Parity error in your core image at location <address>
Parity error in your upper segment at location <address>
          A hardware failure has invalidated the contents of the indicated
          address in your core image.  The safest thing to do in this case is to
          restart with a fresh copy of your program.  If you were running for a
          long time and are willing to risk continuing, you can type CONTINUE.
          You can also try to fix the bad location with DDT or RAID, if present,
          or with the DE and E commands.

PC exceeds mem bounds at user <address>
          Your program tried to jump to an address outside the range of your
          core image.  The message, unfortunately, tells you the illegal address
          rather than the address of the jump instruction.

Pdl ov at user <address>
          Your program had a pushdown list overflow.  The address typed is the
          effective address of a PUSHJ, the return address for POPJ, or the
          address following a PUSH or POP.

PIECE OF GLASS TOO BIG
          Your program is trying to run a display program which is too big for
          the monitor to handle.

Please Kjob or Detach
          You gave a LOGIN command when you were already logged in.

Please specify a TTY device name or user name
          You gave a TALK command with a name that can't be interpreted.  TALK
          accepts only a programmer name or a TTY device name as its argument.

Please specify which TTY to talk to
          The programmer name you typed as argument to the TALK command is
          logged in at more than one terminal.  You must give another TALK
          command, using a particular TTY name as argument instead of the
          programmer name.

Please type ↑C first
          You started your program with CSTART or CCONTINUE, leaving your
          terminal in monitor mode, and then typed a command which affects your
          core image.  Such commands cannot be processed while the program is
          running.  Type CALL and try again.

Please type HAL<cr> first
          You were trying to log in or out when something got confused and you
          tried to give a monitor command although LOGIN or LOGOUT is still
          running.  You must type the precise monitor command HAL<cr> in order
          to stop the program.

Please use the SEND command and let the user link back to you
          You gave a TALK command but are on a network terminal and not logged
          in.  In this case, the preferred technique is to request that the
          logged-in user link back to you by himself giving the TALK command.
          You can SEND the user a message requesting such a link back.

PPN mismatch
          You typed an ATTACH, FINISH, RESET, or KILL command, and the job
          number and PPN arguments did not agree.

Proprietary violation (Public bit set in PC)
          Your program managed to set the Public bit in its PC, which causes a
          fault of this type.  Probably your PC flags got set randomly in a
          buggy JRST 2, instruction somewhere.

Protection failure
          You typed a SETUWP or CLRUWP command, and are not permitted to change
          the write protection of your core image's upper segment.

? SAVE/GET IO error
          You got an IO error from trying to save or get a core image.  Try
          again.  If it still fails, ask a wizard for help.

Spacewar lossage - <error>
          The error indicated can be "Ill mem ref", "PC exceeds mem bounds",
          "Non ex mem", "Pdl ov", "Cons trap", or "Time out".  It means that
          your job started a spacewar module (see the UUO Manual), which caused
          the error.  "Time out" means that your spacewar module did not have
          the timeout-suppression bit set and used up the maximum amount of
          uninterrupted time allowed in a single run.  For the other errors, see
          the particular error message in this list for an explanation.

Spacewar request for P2, but P2 doesn't run spacewar anymore.
          Your program is trying to run a spacewar module on P2 (the KA-10),
          which no longer provides spacewar service.  Spacewar is only available
          on P1.

SWAP READ ERROR
          Your job was swapped out of core, and when the monitor tried to read
          it back in, there was a hardware error in reading the disk.  Your core
          image is probably gone forever.  If you really need it badly, you
          might be able to persuade a system programmer to try to recover it for
          you, but even then there's not much chance.  Start over.

Too few arguments
          This error message can be typed by several different monitor commands
          and should be self-explanatory.

TOTAL DPY BUFFER SPACE EXCEEDED.
          Your program is trying to run a III display program, and there is no
          more room in your allocation of display buffer space.

?TTY doesn't exist.
          You gave a TTY <TTY name> command but the target TTY doesn't exist and
          therefore cannot be twiddled.

TTY not in use
          You gave a TALK command to a PTY which is not in use; you can
          establish a TALK link to an unused physical TTY but not to a PTY.

UDP OFFLINE OR WRITE LOCKED
          Your program has tried to perform some operation on a UDP, and there
          is no pack mounted, or the drive is not turned on, or it does not have
          its ID plug inserted in the front panel, or it is switched to
          read-only and your program tried to write on it.

<dev> Unavailable, P2 not running
          You tried to use a device that is on P2 (the secondary processor), but
          P2 is not running currently so its devices cannot be used.  See a
          wizard if you really need to use such a device.

(Upper not saved)
          You gave a SAVE command and you have an upper segment; SAVE does not
          include the upper segment in the dump file written.  To have the upper
          saved also, use the SSAVE command.  (You can give the SSAVE command
          after getting this message from SAVE if you decide you want the upper
          saved too.)

Use "KJOB" to log yourself out
          You typed a KILL command with your own job number as the argument.

$$ USER DPY ERROR AT <address>
          This message comes along with another which explains the error in your
          display program.  The address is that of the offending instruction.

User Interrupt-Level <error>
          The error can be "ill mem ref", "NXM", or "pdl ov".  See the
          associated message in this list for an explanation (see Non ex mem for
          NXM).  The error happened in your program's interrupt routine.  If it
          says "CH3 error" instead of one of the above, see a system programmer.

User Interrupt-Level attempt to schedule, UUO at user <address>
          Your program's interrupt routine executed a UUO which would put it in
          a wait state.  User interrupt routines aren't allowed to do that.  See
          the UUO Manual.

User Interrupt-Level timeout
          Your program's user interrupt routine has run longer than the maximum
          time allowed.  (No other user can run while an interrupt routine is in
          progress, which is why there is a time limit.  See the UUO Manual
          about interrupts.)

User not logged in
          You gave a TALK command with a programmer name as argument, but the
          given person is not currently logged in.

UUO at user <address>
          This line appears with certain other messages.  It tells you the
          location in your core image of the instruction which caused the error.

<dev> wasn't assigned
          You gave a DEASSIGN or REASSIGN command and hadn't assigned the
          device.

wasn't detached
          You gave the privileged ATTACH <device> command and have the
          privilege, but the device wasn't detached.

WHOAMI attempted when another phantom already exists
          Your program tried to tell the system that it was a particular system
          phantom, but some other phantom job had already claimed that state.

Wrong syntax.  Follow cmd with list of TTY numbers separated by commas.
          You tried to use the syntax TTY <TTY name> <keyword> to do something
          to the named terminal, but the TTY keyword you used doesn't take that
          format of command.  Instead, use the form suggested in the error
          message.

YOU ARE LOCKED OUT OF CORE!
          The amount of user core available has been reduced by other jobs
          starting spacewar modules (thereby being locked in core).  There is
          not enough room to fit your core image.  This condition may fix itself
          quickly; the message does not return you to monitor mode, but will
          keep appearing every so often until you fit again.  This message is
          very unlikely now that SU-AI has over 2 millions words of core.

You can't have it
          You gave an ENABLE command asking for a privilege other than LIV, LUP,
          or UPG.

;Your job has been <verb>ed by job <job number> on <TTY name>
          Someone on the given terminal and job has applied the RESET, KILL,
          ATTACH, or FINISH command to your job; the <verb> tells you which of
          these has been done to your job.
                                A9  BIBLIOGRAPHY


This appendix lists various sources of information about system programs.  Some
of these are available on the disk, some are printed.  Some programs, which were
not written here but came from DEC, are documented in DEC manuals; see a wizard
to borrow a DEC manual if necessary.  For other program documentation which may
be of interest, see the files: AIMS[BIB,DOC], AIMS.OLD[BIB,DOC],
SAILON[BIB,DOC], PRUNE.DAT[UP,DOC], and PRUNE.DAT[1,3].

Many programs are documented only in disk files and are not mentioned here.  The
normal way of finding such online documentation for a program or concept is with
the READ command, e.g., READ DIRED to find out about the DIRED directory editor.
This edits the document file with E (which is most effective on displays).  A
convention used in naming [S,DOC] and [UP,DOC] files is that the filename is the
name of the program being documented, and the extension is the programmer name
of the author.  An update file for a program's documentation will have a file
name matching the program name with the extension being .UPD.

The specific monitor command READ HOW will edit the HOW file, which provides
introductions on the use of many system programs.

SAILONs (Stanford Artificial Intelligence Laboratory Operating Notes) and AIMs
(Artificial Intelligence Memos) are generally available in printed form from the
CSD publications office.  Try to get printed versions of the manuals you need.
Please don't print long manuals yourself from their reference copies on the
disk.

SYSTEM MANUALS:

Monitor     This current manual, the Monitor Command Manual, can be found in the
            online reference version with the command READ MONCOM; the update
            file can be found with READ MONCOM.UPD.  A summary manual of usage
            of WAITS can be found in printed form only in Short WAITS, Stanford
            report number STAN-CS-81-839, by Arthur Samuel, about 30 pages.
UUOs        Programmers should have a printed copy of the UUO Manual, SAILON
            55.5, which describes the monitor interface for user programs; this
            manual can also be referenced online with the command READ UUO, and
            its update file can be found with READ UUO.UPD.

EDITORS:

E           E.ALS[UP,DOC] is the manual for the display editor.  Use the command
            READ E or ET ? to read this online-only manual.  A short manual of
            the most important aspects of E is available in printed form only in
            Essential E, Stanford report number STAN-CS-80-796, by Arthur
            Samuel.  A teaching file is also available for new users; give the
            monitor command HELP ETEACH to start using the teach file--that's
            one of the best ways to learn how to use E, which is by far the most
            commonly used editor on WAITS.
SOS         SOS.LES[S,DOC], SAILON 50.3, is the reference manual for SOS.
TECO        There is a DEC manual which documents standard DEC TECO.  The file
            TECO.MRC[UP,DOC] documents the version run here, but you should read
            the DEC manual first.

LANGUAGE PROCESSORS:

FAIL        FAIL.REG[AIM,DOC], AIM 226, is the reference manual.
SAIL        SAIL.KVL[AIM,DOC], AIM 204.  This is a long manual; get the printed
            version -- do not spool this file!
MACRO       This is a DEC assembler.  See the DEC documentation.
F40         This is the DEC FORTRAN.  See the DEC documentation.
LISP        Our main dialect, MACLSP, is described in LISP.RPG[S,DOC].
PUB         PUB.TES[S,DOC], SAILON 70, describes the PUB Document Compiler.  See
            also PUB.UPD[S,DOC] for updates and tricks to using PUB.

DEBUGGERS:

RAID        This display-oriented debugger is described in RAID.PMP[S,DOC],
            SAILON 58.1.
DDT         This debugger usually used on non-displays is a DEC program.  See
            DDT.REG[UP,DOC] for a quick summary.
BAIL        The SAIL program debugger is described in BAIL.DOC[DOC,AIL], AIM
            270.
                            A10  WAITS CHARACTER SET


The WAITS ASCII character set is displayed in the following table.  The three
digit octal code for a character is composed of the number at the left of its
row plus the digit at the top of its column.  For example, the code for "A" is
100+1 or 101.

                      ASCII  0   1   2   3   4   5   6   7
                        ↓↓↓
                        000  NUL ↓   α   β   ∧   ¬   ε   π
                        010  λ   TAB LF  VT  FF  CR  ∞   ∂
                SIXBIT  020  ⊂   ⊃   ∩   ∪   ∀   ∃   ⊗   ↔
                    ↓↓  030  _   →   ~   ≠   ≤   ≥   ≡   ∨
                    00  040  SP  !   "   #   $   %   &   '
                    10  050  (   )   *   +   ,   -   .   /
                    20  060  0   1   2   3   4   5   6   7
                    30  070  8   9   :   ;   <   =   >   ?
                    40  100  @   A   B   C   D   E   F   G
                    50  110  H   I   J   K   L   M   N   O
                    60  120  P   Q   R   S   T   U   V   W
                    70  130  X   Y   Z   [   \   ]   ↑   ←
                        140  `   a   b   c   d   e   f   g
                        150  h   i   j   k   l   m   n   o
                        160  p   q   r   s   t   u   v   w
                        170  x   y   z   {   |   ALT }   BS

The tables below display the standard ASCII codes, and the SOS representation
used under WAITS for entering the full WAITS ASCII character set from
non-displays with restricted character sets.  The obscure names for the ASCII
codes below 40 are listed just for confusion.  Notes: "DEL" (177) is the ASCII
delete.  "ESC" (33) is their alt mode.  Codes 136 and 137 have two different
interpretations, as shown below.  The SOS representation is so called because it
is provided by SOS, the non-display editor.  Certain other programs also know
about this representation, but it is not built into the monitor in any way.  See
also Section 3 for special system treatment of certain characters from
non-displays.

                               Standard ASCII

                         0   1   2   3   4   5   6   7

                    000  NUL SOH STX ETX EOT ENQ ACK BEL
                    010  BS  TAB LF  VT  FF  CR  SO  SI
                    020  DLE DC1 DC2 DC3 DC4 NAK SYN ETB
                    030  CAN EM  SUB ESC FS  GS  RS  US
                    040  SP  !   "   #   $   %   &   '
                    050  (   )   *   +   ,   -   .   /
                    060  0   1   2   3   4   5   6   7
                    070  8   9   :   ;   <   =   >   ?
                    100  @   A   B   C   D   E   F   G
                    110  H   I   J   K   L   M   N   O
                    120  P   Q   R   S   T   U   V   W
                    130  X   Y   Z   [   \   ]   ∧↑  _←
                    140  `   a   b   c   d   e   f   g
                    150  h   i   j   k   l   m   n   o
                    160  p   q   r   s   t   u   v   w
                    170  x   y   z   {   |   }   ~   DEL

                               SOS Representation

                         0   1   2   3   4   5   6   7

                    000  --- ?!  ?"  ?#  ?$  ?%  ?&  ?'
                    010  ?(  TAB LF  VT  FF  CR  ?)  ?*
                    020  ?+  ?,  ?-  ?.  ?/  ?0  ?1  ?2
                    030  ?9  ?6  ?4  ?=  ?<  ?>  ?7  ?8
                    040  SP  !   "   #   $   %   &   '
                    050  (   )   *   +   ,   -   .   /
                    060  0   1   2   3   4   5   6   7
                    070  8   9   :   ;   <   =   >   ??
                    100  @   A   B   C   D   E   F   G
                    110  H   I   J   K   L   M   N   O
                    120  P   Q   R   S   T   U   V   W
                    130  X   Y   Z   [   \   ]   ↑   ←
                    140  ?@  ?A  ?B  ?C  ?D  ?E  ?F  ?G
                    150  ?H  ?I  ?J  ?K  ?L  ?M  ?N  ?O
                    160  ?P  ?Q  ?R  ?S  ?T  ?U  ?V  ?W
                    170  ?X  ?Y  ?Z  ?[  ?:  ?3  ?]  BS
                          A11  MONITOR COMMAND SUMMARY



On the following pages, the monitor commands are listed first alphabetically and
then by function.  In the alphabetical list, the command name is printed with
the minimum necessary unique abbreviation capitalized and the rest of the name
in lower case.  The list provides a brief description of the purpose of each
command along with the arguments for some commands; included is a page reference
to the command's complete discussion in this manual.  If the command loads a
program into your core image, the program's name is listed.  The following
abbreviations are used:



phydv   physical device name
dv      logical or physical device name
prj     a project name
prg     a programmer name
sa      octal starting address; if omitted use normal starting address
cor     decimal number of 512-word pages to assign to this program
lh      octal left half word
rh      octal right half word
adr     octal address
jn      decimal job number
fn      a file name (may include project-programmer name)
host    a network host name
prot    octal protection code
phone   telephone number, format {(ddd)}ddd{-}dddd
priv    privilege name
→       first program listed automatically loads the next
⊗       program to be loaded is specified as argument
{...}   enclose optional argument
|       separates alternative arguments
-       no arguments for this command
*       privileged version of command
Command      Program      Arguments       Page Description (* means privileged)

@            ATSIGN                        86  make cross-reference listings with ATSIGN
ACcess       ACCESS       prj{,prg}        86  access a user file directory
ADvance      DART                         148  mag tape positioning
ALias                     prj{,prg}        53  set disk PPN
Assign                    phydv {dv}       51  assign device to job
ATtach                    jn{[prj,prg]}    50  attach job to TTY
ATtach                    jn{[prj,prg]}    87* attach phantom job and log it in
ATtach                    dv               87* attach device to system
BACkspace    DART                         148  mag tape positioning
BATch        MAIL                         141  schedule delayed command execution
BEep                      -                87* beep all terminals (from the CTY only)
BOok         E            {fn}             89  edit with E in book mode
BRoadcast                 -                87* accept Ethernet broadcasts
CAncel       CANCEL       -               145  delete reminders
CContinue                 -                49  continue job, TTY in monitor mode
CDetach                   -                50  continue job, detach TTY
CEtv         E            fn               89  create file with E
CFork                     -                50  continue job, detach TTY, make new job
CKmail       CKMAIL       prg             146  see if a user has new mail
CLRUWP                    {prot}           48  clear upper segment write protect
COMpile      SNAIL→⊗                       93  compile programs
CONtinue                  -                49  continue job, TTY in user mode
COPy         COPY                         108  copy files
Core                      {cor}            48  set or type core size
CREAte       SNAIL→SOS    fn               89  create file with SOS
CREF         SNAIL→CREF   -               104  make cross-reference listings with CREF
CStart                    {sa}             49  start job, TTY in monitor mode
CTyset                                     87* select alternate or main CTY
DAytime                   {jn}             52  type time of day or job times
DCaavg                    -                87  type averages for DCA interrupts
DDt                       -                49  enter DDT or RAID
DE (deposit)              lh rh {adr}      48  deposit into core image
Deassign                  {dv}             51  deassign device from job
DEBug        SNAIL→⊗                       93  compile and load programs, start debugger
DECide       ORACLE                        86  ask the computer for advice
DELete       COPY                         113  delete files
DETach                    -                50  detach job from TTY
DETach                    dv               87* detach device from system
DFind        FIND                          74  find a word in the dictionary
DIAl         DIAL         dv | phone       86  talk to computer by telephone
DIrectory    COPY                         113  type file statistics
DISable                   {priv}           87* disable privileges
DO           DO           {fn}             61  execute commands from a file
DOVer        SPOOL                        119  print a file on the Dover
DQavg                     -                87  type out the disk queue average
DRd          DIRED        {[prj,prg]}      12  run directory editor
DSksiz       DSKSIZ       {prg}            85  find out disk usage and quota
DTn          DTN          site            159  DM simulator TELNET
DUmp         DART                         148  dump disk files to mag tape
E (examine)               {adr}            48  examine core image
EDDt                      -                87* stop system, enter Exec DDT
EDit         SNAIL→SOS    {fn}             89  edit file with SOS
EFInd        EFIND                         84  find string in E-format file
ELfqfix                   -                53  fix a jammed ELF queue interlock
ENable                    {priv}           87* enable privileges
EOt          DART                         148  mag tape positioning
ERead        E            {fn}             89  edit file with E in readonly mode
ETv          E            {fn}             89  edit file with E
EVent        MAIL                         136  list an event in the system messages
EXecute      SNAIL→⊗                       93  compile, load, and run programs
FIles                     {jn|fn}          52  type status of files in use
FIND         FIND                          74  find character string in a file
FINGer       FINGER       {prg}            85  type name and location of users
FINIsh                    {dv}             51  close and release device
FIXimlac     FIXIML       -                86  initialize IMLAC terminal
FLush                     dv               51  clear TTY buffers
FOrk                      -                50  detach, make new job
FRaid        FRAID        {fn}             86  examine or alter a binary disk file
FTp          FTP          host            162  run network file transfer program
Get          ⊗            {dv} fn {cor}    47  load core image from file
GRipe        MAIL                         135  document system bugs
HAlt (or ↑C)              -                49  stop job (↑C)
HELLo                     -                52  type name of current monitor version
HELP         HELP         {fn}             85  explain system program
HOSt         HOST         host            154  find out who a given network host is
HOT          HOT          -                86  read AP or NYT news wire
KAttach      LOGOUT       jn{[prj,prg]}    56  kill this job, attach another
KIll                      jn               53  kill another job
Kjob         LOGOUT                        56  kill this job
KLog         LOGOUT→LOGIN prj,prg          56  kill this job, make another
LAter        MAIL                         140  run a program later
LISP         LISP         -                86  run LISP
LOAd         SNAIL→⊗                       93  compile and load programs
LOCate       DART                         148  tell which dump tapes have file
Login        LOGIN        prj,prg          55  make a new job
LOGOut       LOGOUT       -                56  kill this job
MAIl         MAIL                         132  send mail to a user
MAKe         SNAIL→TECO   fn               89  create file with TECO
NAme         MAIL         prg             138  name a user and give forwarding address
NOBroadcast               -                87* ignore Ethernet broadcasts
NOEdit                    -                29  user display terminal has no edit key
NS           NS           -                86  read AP or NYT stories
OFind        FINE                          74  find a string according to OPTION.TXT
OTn          OTN          site            155  old TELNET protocol
P2LOAD       P2LOAD                        87* reload P2
PDetach                   -                50  detach job and make it a phantom
PItime                    -                87  type estimated time in PI channels
PJob                      {dv}             52  type job using device or this TTY
PLAn         MAIL                         137  create plan file
PLIst        DART         -               148  list PUMPKIN requests
POx          SNAIL→POX    {fn}             91  compile document with POX
PPpn                      {jn}             52  print PPN of job
PREpare      SNAIL→⊗                       93  compile, load programs with debugger
PROcess      SNAIL→⊗                       92  execute command string
PROVe        PROVE                         86  run SYS:PROVE
PTty                      {jn}             52  type TTY attached to job
PUB          SNAIL→PUB    {fn}             91  compile document with PUB
PUMpkin      DART                         148  ask for offline file restore
Qspool       SPOOL        -               120  type spooler status and queues
QUit                      -                53  close any incoming network connection
R            ⊗            fn {cor}         47  run program from [1,3] disk area
RCv          RCV                          147  receive mail for user
READ         E            {fn}             89  edit system document with E
REAP         DART                         148  mark files for Dart dumping and deletion
REASsign                  dv jn            51  assign device to another job
REEnter                                    49  start program at reenter address
REMind       MAIL                         134  create a reminder message
REName       COPY                         113  rename files or change protection
RER          SNAIL→⊗                       92  run program from SYS, give it text lines
RERUn        SNAIL→⊗                       92  run program from DSK, give it text lines
RESEt                     {jn{[prj,prg]}}  53  reset a job
RESOurces                 -                52  type available system resources
RESTore      DART                         148  restore files from dump tape
RETry        MAIL         -               139  try again to send queued mail
REWind       DART                         148  mag tape positioning
RUn          ⊗            {dv} fn {cor}    47  run a program from core image file
SAve                      {dv} fn {cor}    48  save core image in a file
SD                        host            161  run SUPDUP display-telnet program
SENd         MAIL                         133  send message to user's TTY
SETUWP                    {prot}           48  set upper segment write protect
SPool        SPOOL                        115  request line printer listing
SSave                     {dv} fn {cor}    48  save two-segment core image
Start                     {sa}             49  start job, TTY in user mode
SUpdup/SD    SUPDUP       site            161  run SUPDUP display-telnet program
SYstat       WHO          -                85  type system status
TAlk                      dv               53  talk to another TTY
TECo         SNAIL→TECO   {fn}             89  edit file with TECO
TELnet/TN    TELNET       host            155  talk to network computer
TESt         TEST                          86  run SYS:TEST.DMP if it exists
TEX          SNAIL→TEX    {fn}             91  compile document with TEX
TIme                      {jn}             52  type runtime for job or system
TList        DART                         148  list files on a dump tape
TN                        host            155  talk to network computer
TRAnsfer     COPY                         113  copy files, delete source
TRY          SNAIL→⊗                       93  compile, load with debugger, run
TTy                                        45  set TTY parameters
TUrkey       DART                         148  see who last used a DART tape
TYpe         COPY                         113  type a file
UDpufd       UFD          prj,prg          86  modify UDP file directory
UFd          UFD          prj,prg          86  modify DSK file directory
UNDelete     UNDELE       fn               86  try to recover deleted file
UNPRotect    UNPROT       fn               86  reduce protection of a file
UNPUmpkin    DART         -               148  undo PUMPKIN requests
UNReap       DART                         148  undo REAP requests
UNSpool      SPOOL        -               121  delete spooler request
VERify       VERIFY                        86  run SYS:VERIFY
WHEN         WHEN         prg              85  see when a user last logged out
WHEre        WHERE        {prj,}{prg}      85  type job info for PPN or job name
Who          WHO          -                72  display system status
XGplist      COPY                         113  list file on XGP
XPart        XPART                        119  prepare part of a file for XGP spooling
XSpool       SPOOL                        119  request XGP listing
Zero         ZERO         dv               71  clear DTA, UDP, or DSK directory
11LOad       11LOAD                        87* reload the console-11
Commands that run programs:

SNAIL Class     COPY Class      TELNET Class    DART Class      Information     

BOOK            COPY            DIAL            ADVANCE         DFIND           
CETV            DELETE          DTN             BACKSPACE       EFIND           
COMPILE         DIRECTORY       FTP             DUMP            FIND            
CREATE          RENAME          HOST            EOT             FINGER          
CREF            TRANSFER        OTN             LOCATE          HELP            
DEBUG           TYPE            SD              PLIST           OFIND           
DO              XGPLIST         SUPDUP          PUMPKIN         SYSTAT          
EDIT                            TELNET          REAP            WHEN            
EREAD                           TN              RESTORE         WHERE           
ETV                                             REWIND          WHO             
EXECUTE                                         TLIST                   
LOAD            SPOOL Class     MAIL Class      TURKEY          Others          
MAKE                                            UNPUMPKIN                       
POX             DOVER           BATCH           UNREAP          @               
PREPARE         QSPOOL          CANCEL                          ACCESS          
PROCESS         SPOOL           CKMAIL                          DECIDE
PUB             UNSPOOL         EVENT                           DRD
READ            XPART           GRIPE                           DSKSIZ
RER             XSPOOL          LATER                           FIXIMLAC
RERUN                           MAIL                            FRAID
TECO                            NAME                            HOT
TEX                             PLAN                            LISP
TRY                             RCV                             NS
                                REMIND                          PROVE
LOGIN Class                     RETRY                           TEST
                                SEND                            UDPUFD
KATTACH                                                         UFD
KJOB                                                            UNDELETE
KLOG                                                            UNPROTECT
LOGIN                                                           VERIFY
LOGOUT                                                          ZERO
                
Other system commands:

SAVEGET Class   START Class     Other           Information

CORE            CCONTINUE       ALIAS           DAYTIME
GET             CONTINUE        BEEP            DCAAVG
R               CSTART          BROADCAST       DQAVG
RUN             DDT             CLRUWP          FILES
SAVE            HALT            CTYSET          HELLO
SSAVE           REENTER         DE              PITIME
                START           DISABLE         PJOB
Device Control                  E               PPPN
                ATTACH Class    EDDT            PTTY
ASSIGN                          ELFQFIX         RESOURCES
DEASSIGN        ATTACH          ENABLE          TIME
FINISH          CDETACH         KILL
FLUSH           CFORK           NOBROADCAST
REASSIGN        DETACH          NOEDIT
RESET           FORK            P2LOAD
                PDETACH         QUIT
                                SETUWP
                                TALK
                                TTY
                                11LOAD
INDEX

11LOAD command   87
@ command   86
ACCESS command   86
ACCESS switch in COPY   112
activation characters   16, 17
add channel   24
add piece of glass   26
addresses, core   5, 11
ADVANCE command   148
AL   88
AL switch in SNAIL   93, 105
ALGOL   5
alias   5, 19, 50, 52, 53
Alias (in WHO display)   72
ALIAS (in wholine)   19
ALIAS command   53
ALL switch in COPY   112
ALT   43
ALT key   15
alt mode   15, 172
ALT MODE, non-display   43
ALTOTALK display type   29
AMBASSADOR display type   29
APPEND switch in MAIL   128
arguments   7
ARM device   8
ARPA network   131, 154
ARPA switch in MAIL   128
ARROW (in TTY command)   45
ARROW (LOGIN option)   55
ASCII   15, 156, 172
ASCII switch in COPY   112
ASK switch in COPY   112
ASK switch in SPOOL   115
assembly language   5
ASSIGN command   8, 51
Associated Press   55, 86
ATSIGN program   86
ATT privilege   50, 87
ATTACH command   50, 56, 87
AUDIO (LOGIN option)   55
audio switch   27, 55
autologout   5
available channel   24
background mode   53
backspace   15
BACKSPACE command   148
backspace, deleting   16
backspace, non-deleting   16
BAIL   48, 49, 88, 98, 171
BAIL switch in SNAIL   98, 105
BATCH command   141
BBOARD   132
BBOARD filehack in COPY   110
BEEP   27
BEEP (in TTY command)   45
BEEP (LOGIN option)   55
BEEP command   87
beeping, automatic   27, 55
bibliography   171
BINARY switch in COPY   112
binary, relocatable   see relocatable binary
BLISS   88
BLISS switch in SNAIL   93, 105
BLOCKED switch in COPY   112
BMARGIN switch in XSPOOL and DOVER   119
BONLY switch in COPY   112
BOOK command   89
book mode   89
BOW (LOGIN option)   55
BREAK   18
BREAK (in TTY command)   45
BREAK 1 X   19, 45
BREAK A   24
BREAK B   27
BREAK C   21
BREAK CALL   23
BREAK CLEAR   23
BREAK D   24
BREAK F   18, 45
BREAK G   24
BREAK H   22
BREAK key   15
BREAK L   24
BREAK M   23
BREAK N   20
BREAK O   18
BREAK P   20
BREAK Q   19
BREAK R   23
BREAK S   24
BREAK T   24
BREAK U   27
BREAK W   19
BREAK X   19, 45
BREAK .   18, 50
BREAK 1 .   18
BROADCAST command   87
BS   16
BS key   15
bucky bit (non-display escape)   44
bucky bits   15
bulletin board   132
C100A display type   29
C100B display type   29
CALL   18, 19, 43, 49, 53
CALL key   15
call, deferred   18
cameras, TV   22
CANCEL command   145
Canon printers   58, 115
CAR device   8
carriage return   15, 17, 43, 45, 55
CC switch in MAIL   128
CCONTINUE command   49
CDETACH command   50
CETV command   10, 89
CFORK command   50
channel number   24
channels, Data Disc   6, 19, 22, 52, 87
channels, private   22, 55
channels, public   22
CHAOS net, MIT   125
CHAR (job queue)   19
character conversion, non-display   43
character set   15, 172
character set, full   18
CHRMAC   42
CHRMAC (LOGIN option)   55
CKMAIL command   146
CKSUM program   146
CLEAR   16
CLEAR key   15
clear line editor   16
clear page printer   20
clearing typeahead   18
CLRUWP command   48
CMQ (job queue)   19
code, character   15, 172
command decoder   7, 15, 16
command files   61
commands, monitor   7, 173
commercial-free radio   27
COMPILE command   11, 93
COMPILE switch in SNAIL   93, 97, 105
compiling programs   11
complaints, compliments, criticisms   135
compute-bound program   53
CONLY switch in SNAIL   93, 97, 105
continuable   49
CONTINUE command   19, 49
CONTROL   61
CONTROL and META (non-display escape)   44
CONTROL key   15
CONTROL key, non-display   see CTRL key
CONTROL-B   16
CONTROL-BREAK   18, 20
CONTROL-BS   16
CONTROL-CALL   18
CONTROL-CLEAR   18, 20
CONTROL-D   16
CONTROL-FORM   16
CONTROL-I   16
CONTROL-K   16
CONTROL-L   16
CONTROL-META-BS   16
CONTROL-META-LINE   18
CONTROL-META-SPACE   16
CONTROL-number   16
CONTROL-R   16
CONTROL-RETURN   16, 17
CONTROL-S   16
CONTROL-SPACE   16
CONTROL-T   16
CONTROL-TAB   16
CONVERT (in TTY command)   45
CONVERT (LOGIN option)   55
CONVERT switch in COPY   112
COOKIE (LOGIN option)   55
COPY   58, 108
COPY command   58
core   see storage, core
CORE command   48
core image   5, 7, 11, 13, 19, 46, 48, 54, 72
COUNT switch in MAIL   128, 130
CREATE command   89
CREF command   104
CREF switch in SNAIL   97, 104, 105
CSD filehack in COPY   110
CSTART command   49
CTRL (control) key, non-display   43
CTRL-C, non-display   43
CTRL-I, non-display   43
CTRL-K, non-display   43
CTRL-L, non-display   43
CTRL-leftarrow   44
CTRL-O, non-display   43
CTRL-Q, non-display   43
CTRL-S, non-display   43
CTRL-U, non-display   43
CTRL-underscore   44
CTRL-Z, non-display   43
CTY device   8
CTYSET command   87
cursors   6, 16
DART   60, 148
data   8
Data Disc queue   23
Data Discs   6, 14, 16, 20, 21
Datamedias   see terminals, individual display
DATE (in wholine)   19
DATE switch in MAIL   128, 129
DAY (in wholine)   19
DAY filehack in COPY   110
DAYTIME command   7, 52
DCAAVG command   87
DCQ (job queue)   19
DD (in wholine)   19
DD terminals   see Data Discs
DDT   48, 49, 88, 98, 171
DDT command   49
DDT switch in SNAIL   98, 105
DDT, Executive   87
DE (deposit) command   48
DEASSIGN command   51
DEBUG command   93
debugging program   see DDT, RAID, or BAIL
DECIDE command   86
DECtape   8, 19, 71, 166
default file protection, UFD's   112
Defense, Department of   154
deferred call   18
delete   15, 172
DELETE (in TTY command)   45
DELETE (LOGIN option)   55
delete channel   24
DELETE command   58, 113
delete piece of glass   26
DELETE switch in SPOOL   115
deletion of REMINDers, LATER requests, and queued MAIL   145
DENSITY switch in COPY   112
deposit in core   see DE
DET (in WHO display)   72
DET (in wholine)   19
DET privilege   5, 55, 87
DETACH (LOGIN option)   55
DETACH command   50, 87
detached jobs   50, 72
DEV privilege   87
device   51, 166
device name   8, 87
device name, logical   8, 51
device name, physical   8, 51
device names, list of   8
device user   52
DFIND command   74
DIAL command   86, 156
DIGEST (LOGIN option)   55
DIGEST filehack in COPY   110
DIOW (job queue)   19
directories   8
DIRECTORY command   58, 113
directory device   8
DIRED   12
DIRED program   12
DISABLE command   87
disk   8, 19, 47, 51, 52, 53, 60, 71
disk PPN   see alias
display   see terminals, display
DISPLAY=... (LOGIN option)   55
DIST switch in MAIL   128
DLN device   8
DM (in wholine)   19
DM128 display type   29
DM2500 display type   29
DM3025 display type   29
DMP files   8, 11, 47, 105
DMs   see terminals, individual display
DMWAITS display type   29
DO   61, 92, 100
DO command   61
documentation, program   5, 171
double bucky   15
Dover   58, 86, 115, 119
DOVER command   58, 115, 119
DOWN filehack in COPY   110
DQAVG command   87
DRD command   12
DSK device   see disk
DSKF (in wholine)   19
DSKOPS (in wholine)   19
DSKQ (in wholine)   19
DSKSIZ command   85
DSPOOL switch in COPY   112
DTA device   see DECtape
DTN   154, 155
DTQ (job queue)   19
DUMP command   148
dump file   see DMP files
DUMP switch in SPOOL   115
DUMPED switch in COPY   112
DWQ (job queue)   19
E   10, 15, 55, 88, 171
E (examine) command   48
E switch in MAIL   128
EBOX msec (in TIME command)   52
ECHO (in TTY command)   45
ECHO (LOGIN option)   55
EDDT command   87
EDIT command   89
EDIT-CLEAR   28
EDIT-key Displays   33
editing   10
editor, display   10, 89
editor, line   see line editor
EFIND command   84
EINIT (LOGIN option)   55
EINIT(n:m) (LOGIN option)   55
EINIT= ...  (LOGIN option)   55
ELF device   8, 53
ELFQ (job queue)   19
ELFQFIX command   53
ENABLE command   87
end of file   18, 43
END switch in XSPOOL   119
EOT command   148
EREAD command   89
error messages   170
ESC   18
ESC !   23
ESC *   18
ESC +   18
ESC 1 CR   28, 33
ESC 1 X   19, 45
ESC A   24, 26
ESC B   27
ESC C   21
ESC CALL   23
ESC CLEAR   23
ESC D   24, 26
ESC E   20
ESC F   18, 45
ESC FORM   20
ESC G   20
ESC H   18, 22
ESC I   18
ESC J   20
ESC key   15
ESC L   20
ESC M   23
ESC N   20
ESC n <   28
ESC n >   28
ESC n !   23
ESC n CR   42
ESC O   18
ESC P   20
ESC Q   19
ESC R   20
ESC S   24, 26
ESC T   24
ESC U   27
ESC V   18
ESC W   19, 50
ESC X   19, 45
ESC Y   20
ESC Z   27
ESC .   18, 50
ESC 1 .   18
ESCAPE (in TTY command)   45
ESCAPE, non-display   43
Ethernet   87, 125, 131, 154
ETV   see also E
ETV command   10, 89
EVEN switch in COPY   112
EVENT command   136
examine core   see E (examine) command
EXECUTE command   11, 93
EXIST (in TTY command)   45
EXPAND switch in MAIL   128
extensions, filename   8
EXTRA switch in COPY   112
EXTRA switch in SPOOL   115
F4 switch in SNAIL   93, 105
F40   88, 171
FACT.TXT file   115
FAIL   5, 88, 171
FAIL switch in SNAIL   93, 105
FASM   88
FAST (LOGOUT option)   56
FAST switch in COPY   112
FDISPLAY=... (LOGIN option)   55
FF switch in SPOOL   115
file access groups   55
file directory   see directory
file protection   55
file storage   8
File Transfer Protocol   154, 162
filehacks   110
filenames   8
FILES command   18, 52
files, disk   8, 19
FILL (in TTY command)   45
FILL (LOGIN option)   55
FIND command   74
FINGER command   12, 56, 85
FINISH command   51
FIXIMLAC command   86
FLUSH command   51, 87
FNOTABS (LOGIN option)   55
FONT switch in COPY   112
FONT switch in XSPOOL and DOVER   119
FOO switch in COPY   112
FORK command   50
form feed   15, 43, 110
FORM key   15
FORTRAN   88, 171
FORTRAN switch in SNAIL   105
FORTRAN switch in SPOOL   115
fortune cookie   55
FORWARD filehack in COPY   110
FORWARD switch in SNAIL   100, 105
forwarding, mail   132
FRAID command   86
FSIZE switch in DOVER   119
FTABS (LOGIN option)   55
FTP   154
FTP command   162
FUDGE2   99
FULL (in TTY command)   45
FULL (LOGIN option)   55
full character set mode   18, 55
FULL switch in COPY   112
gag   53
GAG (in TTY command)   45
GAG (LOGIN option)   55
GET command   47
GLASS (in TTY command)   45
GLASS (LOGIN option)   55
glass TTY   43
glass, pieces of   20, 26
glitch   20
GOLD filehack in COPY   110
graphics   6, 20
GRIPE (LOGIN option)   55
GRIPE command   135
GRIPES filehack in COPY   110
GRN device   8
GTOTAL switch in COPY   112
HALT command   49
HANG (in TTY command)   45
HANGUP (LOGOUT option)   56
HEADER switch in COPY   112
HEADER switch in MAIL   128
HEADING switch in SPOOL   115
HEATH19 display type   29
HELLO command   52
HELP command   12, 85
hide   18, 25
HIDE (in TTY command)   45
HIDE (LOGIN option)   55
HOLD switch in SPOOL   115
holding   18, 43
holding, automatic   20
home line for DD   23
HOST   154
HOT command   86
HOW file   171
HP2648A display type   29
I/O   see device
IGNI switch in COPY   112
IGNO switch in COPY   112
III (in wholine)   19
IIIs   6, 14, 16, 20, 26
IMLAC   86
IMP device   8, 154
IMPTYP switch in MAIL   128
Increment (in TIME command)   52
individual display terminals   see terminals, individual display
information, system   5, 12, 52, 72
INIT (LOGIN option)   55
input buffer   7, 17, 18, 61
Interface Message Processor   see IMP
Introduction for New Users   3
Introduction to Terminals   6
INTW (job queue)   19
IOWQ   19, 49
IOWQ (job queue)   19
JBS (in wholine)   19
JLOG   50, 72, 87
JLOG bit   50
Job (in WHO display)   72
JOB (in wholine)   19
Job Data Area   13, 48, 49
job name   47, 72, 85
job number   5, 7, 9, 50, 51, 52, 53, 72, 85
JOBDDT   48, 49
JOBFF   48
Jobnam (in WHO display)   72
JOBNAM (in wholine)   19
JOBPC   49
JOBRD   19
JOBREN   49
jobs   19
JOBSA   13, 49
KATTACH command   56
keyboard mapping   22
keyboard scanner   15, 18
keyboards   15
KILL command   53
KILL switch in COPY   112
KJOB command   9, 56
KL-10   5
KLOG command   56
L switch in E   89
languages, programming   5, 171
LATER command   140
LATER requests, deleting   145
letters, lower case   7, 8, 18, 43, 45
LHEIGHT switch in DOVER   119
LIBRARY switch in SNAIL   93, 99, 105
LINE   see line feed
Line (in WHO display)   72
LINE (job queue)   19
line editor   6, 15, 16, 17, 20
line feed   15, 43
LINE key   15
line number, terminal   24, 52, 72
line numbers, SOS   10, 112, 115
line printer   see printers
LINK   88
LINK switch in SNAIL   98, 105
LISP   5, 61, 171
LISP command   86
LIST switch in COPY   112
LIST switch in MAIL   128
LIST switch in SNAIL   97, 105
LIV privilege   5, 87
LMARGIN switch in XSPOOL and DOVER   119
LOAD (in wholine)   19
LOAD command   11, 93
LOADER   48, 49, 88, 105
LOADER switch in SNAIL   98, 105
loader switches   102, 106
loading programs   11
local user   86
LOCATE command   148
LOCK   19
logged-in user   87
logical device name   see device name, logical
LOGIN command   5, 7, 9, 55
login options   30, 55
login, automatic   7
LOGOUT   9, 10, 56
LOGOUT command   56
logout, automatic   5
LOGOUT.MSG file   56
LOGRUN   55
LOGRUN (LOGIN option)   55
LONLY switch in SNAIL   93, 97, 105
lower segment   13
LUP privilege   87
MACRO   88, 171
MACRO switch in SNAIL   93, 105
macros, terminal input   42, 44, 55
MAGIC   25
magnetic tape   8, 19, 47, 51, 60, 167
MAIL   55, 59, 122, 123
MAIL command   55, 132
MAIL error recovery   142
MAIL filehack in COPY   110
MAIL switch in MAIL   128
MAIL$E.TXT file   124, 142
mail, deleting queued   145
MAIL, interfacing with, from other programs   144
mail, network   131
MAKE command   89
MAP switch in SNAIL   98, 105
mapping   23
mapping, keyboard   see keyboard mapping
MAS access group   55
ME (LOGIN option)   55
ME (LOGOUT option)   56
MESSAG (LOGIN option)   55
messages, sending and mailing   123
messages, system   9, 55, 132, 136
META   16, 61
META key   15
META-BS   16
META-CALL   18
MICRO-PLANNER   5
MIDAS   88
MIDAS switch in SNAIL   93, 105
MLENGTH switch in COPY   112
MODE switch in SPOOL   115
monitor mode   7, 9, 15, 18, 18, 47, 49, 50
MSG filehack in COPY   110
MTA device   see magnetic tape
MTQ (job queue)   19
Multics   162
N switch in E   89
NAME command   138
NAP filehack in COPY   110
NARROW switch in SPOOL   115
NCHARS switch in DOVER   119
Negative Service Level   53
NETDBG switch in MAIL   128
network   73, 85
New York Times   86
NEWS filehack in COPY   110
news service   see NS
NL (in wholine)   19
NLINES switch in DOVER   119
NO switch in MAIL   128
NOARROW (LOGIN option)   55
NOBOW (LOGIN option)   55
NOBROADCAST command   87
NOCMFI switch in SNAIL   93, 105
NOCONVERT (LOGIN option)   55
NOCOPY switch in SPOOL   115
NODELETE (LOGIN option)   55
NODELETE switch in SPOOL   115
NODIST switch in MAIL   128
NODM (LOGOUT option)   56
NODMP switch in SNAIL   93, 98, 105
NODUMP switch in SNAIL   98
NODUMP switch in SPOOL   115
NOECHO (LOGIN option)   55
NOEDIT Displays   34
NOFF switch in COPY   112
NOFF switch in SPOOL   115
NOFILL (LOGIN option)   55
NOFORTRAN switch in SPOOL   115
NOFULL (LOGIN option)   55
NOGAG (LOGIN option)   55
NOGLASS (LOGIN option)   55
NOHEADING switch in SPOOL   115
NOLOAD switch in SNAIL   93, 100, 105
NOMAIL (LOGIN option)   55
NOMAIL switch in MAIL   128
NOMSG switch in MAIL   128
non-displays   see terminals, non-display
NONARROW switch in SPOOL   115
NONOTE (LOGIN option)   55
NONUMBER switch in SPOOL   115
NONUMBERS switch in COPY   112
normal activation mode   17
normalize page printer   20
NOSPACES switch in COPY   112
NOTABS (LOGIN option)   55
NOTICE filehack in COPY   110
NOTICE.TXT file   55, 132, 136, 147
NOTITLE switch in SPOOL   115
NOWARN switch in SPOOL   115
NOWHO (LOGIN option)   55
NOWRAPAROUND switch in XSPOOL   119
NOXGP switch in XSPOOL   119
NS   55, 147
NS command   86
NS filehack in COPY   110
NSL   53
NTNODE switch in XSPOOL   119
NUL device   8
null job   52, 72
null-time   19
NULQ (job queue)   19
NULREL switch in SNAIL   105
NUMBER switch in SPOOL   115
number, line   see line numbers
NVNODE switch in XSPOOL   119
OCTAL switch in SPOOL   115
ODD switch in COPY   112
OFFSET switch in COPY   112
OFIND command   74
old mode (UDP)   51
OONLY switch in COPY   112
OPEN (LOGOUT option)   56
operator   53
OPTIMIZE switch in COPY   112
OPTION filehack in COPY   110
OPTION.TXT file   30, 55, 56, 147, 164
OTN   154, 155
OUTGO switch in MAIL   128
OUTGO.MSG file   125, 147
output buffer   18
P switch in E   89
P1 console   87
P2LOAD command   87
page printer   20, 26
Page-Seconds   52
pages   13
PALX   88
PALX switch in SNAIL   93, 105
paper tape   8
paper, pieces of   20
Partial font loading   119
PASCAL   88
PASCAL switch in SNAIL   93, 105
password   55, 71
PAUSE switch in COPY   112
PDETACH command   50
PDP-10   4, 5, 15
PDP-10 console   8
PDP-11 device   8
PGX pseudo-device (COPY)   111
phantom   50, 72, 87, 115
physical device name   see device name, physical
pieces of glass   20
pieces of paper   20
PITIME command   87
PJOB command   52
PL (in WHO display)   72
PLAN command   137
plan file   85, 110, 137, 147
PLAN filehack in COPY   110, 137
PLIMIT switch in XSPOOL   119
PLIST command   148
PLN filehack in COPY   110, 137
PMARGIN switch in XSPOOL   119
PORNO (LOGIN option)   55
POX   88
POX command   91
PPN   5, 8, 9, 19, 50, 52, 53, 55, 56, 85, 87
PPN (in WHO display)   72
PPN (in wholine)   19
PPN, disk   see alias
PPPN command   52
PREFIX, non-display   43
PREPARE command   93
printers   58, 115
private device   51
privilege, file access   55
privileged commands   87
PROCESS command   92
PROCESSOR switch in SNAIL   100, 105
programmer name   5, 19, 53, 59, 85
programs, display   20, 26
programs, system   46, 47, 54
programs, system information   7, 12
project name   5
project-programmer name   see PPN
protected mail files   132
protection   55
PROTECTION switch in COPY   112
PROVE command   86
PS (in TIME command)   52
pseudo-mailbox   132
pseudo-teletype   see PTY
PTP device   8
PTR device   8
PTTY command   52
PTY   8, 56, 72
PTYJOB   156
PUB   88, 171
PUB command   91
public device   51
PUMPKIN command   148
PUP device   8, 154
QMAINT (LOGIN option)   55
QSPOOL command   58, 115, 120
QSPOOL switch in SPOOL   115
queue   85
Queue (in WHO display)   72
QUEUE (in wholine)   19
queue names   19
QUEUE switch in MAIL   128
queued mail   128, 131, 132, 139
queued mail, deleting   145
QUIET switch in COPY   112
QUIT command   53
R (in wholine)   19
R command   47, 54
R switch for editors   89
RAID   48, 49, 88, 98, 171
RAID switch in SNAIL   98, 105
RCOR (in wholine)   19
RCV   147
READ command   12, 89
REAP command   148
REASSIGN command   51
RECOPY switch in SPOOL   115
records   8
REENTER command   49
REFERENCED switch in COPY   112
refresh   20
REL files   8
REL switch in SNAIL   93, 105
relocatable binary   8, 11
REMIND (LOGIN option)   55
REMIND command   134
reminders, deleting   145
RENAME command   58, 113
RENAME switch in COPY   112
repeat escape command   18
REPEAT switch in SPOOL   115
REPLYTO switch in MAIL   128
RER command   92
RERUN command   92
RESET   20, 47, 48
RESET command   53
RESOURCES command   52, 169
responsible keyboard   23
RESTORE command   148
retrieve last line   16
RETRY command   139
RETURN   see carriage return
RETURN key   15, 16
REWIND command   148
RMARGIN switch in XSPOOL   119
ROTATE switch in DOVER   119
RP (in wholine)   19
RPG   56
RPG filehack in COPY   110
RPGSAV (LOGIN option)   55
RPGSAV (LOGOUT option)   56
RTIME   19
RUBOUT, non-display   43
RUN (LOGIN option)   55
RUN command   47
run time   52, 72, 85
running programs   11, 47
RUNQ (job queue)   19
RUNTIME (in wholine)   19
runtime, incremental   19
S1 switch in SNAIL   93, 105
SAI files   8
SAIL   5, 88, 171
SAIL switch in SNAIL   93, 105
SAISEG switch in SNAIL   98, 105
SAVE command   48
SAVE switch in COPY   112
SAVE switch in SNAIL   98, 105
SAVED.MSG file   147
scanner, keyboard   see keyboard scanner
scrolling   20
SD   154
SEARCH switch in COPY   112
Seg (in WHO display)   72
segment, lower   see lower segment
segment, upper   see upper segment
SEGNAM (in wholine)   19
select audio channel   27
select channel   24
select piece of glass   26
SEND command   133
SEND switch in MAIL   128
SETPR2   170
SETUWP command   48
SHIFT key, non-display   43
SHIFT keys   6, 15
SHIFT LOCK key   6, 15
Short WAITS   171
Size (in WHO display)   72
SIZE (in wholine)   19
SLEEP   19
SNAIL   10, 57, 88
SNDMSG   see MAIL program
SNK (job queue)   19
SOS   10, 88, 89, 171
SOS representation   43
spacewar module   19, 72, 170
special activation mode   17
SPEED (in TTY command)   45
SPOOL command   58, 115
SPOOL switch in COPY   112
spoolers   58, 111, 115
spying   25
SSAVE command   48
Stanford ASCII   see WAITS ASCII
START command   49
starting programs   49
status, system   19
STOP (job queue)   19
stop a program   15
stop typeout   18, 43
storage, core   5, 13, 19
SUBJECT switch in MAIL   128
SUNet   125, 131, 154
SUPDUP   154, 161
suspend typeout   18, 43
Suspended XGP listings   119
switch, audio   see audio switch
switch, video   see video switch
SWR (in WHO display)   72
SYS device   8, 47, 51
SYSTAT (LOGIN option)   55
SYSTAT command   85
system messages   132, 136
system programs   47
system wholine   see wholine
TAB   16, 43
TAB key   15
TABS (in TTY command)   45
TABS (LOGIN option)   55
tabs, hardware   45
TALK command   53
talk ring   53
tape, magnetic   see magnetic tape
tape, paper   8
TCOR (in wholine)   19
TECO   10, 88, 89, 171
TECO command   89
TELERAY display type   29
TELERB display type   29
Teletypes   6
TELEVIDEO display type   29
TELNET   154, 155
TEMPC (in wholine)   19
TEMPF (in wholine)   19
terminal   7, 8, 45
terminals, display   6, 15, 20, 28
terminals, EDIT-key display   33
terminals, individual display   28
terminals, no-EDIT-key display   34
terminals, non-display   43
TEST command   86
TEX   88
TEX command   91
text nodes   119
TGAG (in TTY command)   45
tick   19, 72
TIME (in TTY command)   45
Time (in WHO display)   72
TIME (in wholine)   19
TIME command   52
TIME switch in COPY   112
TIME switch in MAIL   128, 129
timesharing   4
TITLE switch in COPY   112
TITLE switch in SPOOL   115
TLIST command   148
TMARGIN switch in XSPOOL and DOVER   119
TMP   56
TMPCOR   56, 61
TN   154, 155
TOP key   6, 15
TPL pseudo-device (COPY)   111
TQ (job queue)   19
TRANSFER command   58, 113
TRY command   93
TTY (in wholine)   19
TTY command   29, 45
TTY device   see terminals
TTY EXIST nnn command   87
TTY NO DM   56
TTY SPEED   87
TTY ENABLE nnn command   87
TTYUUO   43
TURKEY command   148
TV (in WHO display)   72
TV device   8
TV receivers   24
TYPE command   58, 113
type wholine   44
typeahead   7, 18
UCOR (in wholine)   19
UDP   8, 51, 52, 71, 111, 169
UDPUFD command   86
UFD   8
UFD command   86
UFD protection   112
UFDPRO switch in COPY   112
UIGNORE switch in COPY   112
UNDELETE command   86
UNHIDE (LOGIN option)   55
UNPROTECT command   86
UNPUMPKIN command   148
UNREAP command   148
UNSPOOL   121
UNSPOOL command   58, 115
UPDATE (in TTY command)   45
UPG privilege   87
upper segment   13, 19, 48, 72
user disk pack   see UDP
User File Directory   8
user mode   7, 49
USETI switch in XSPOOL   119
UTPCLR   71
UUO Manual   171
UUOs   4, 5
vector   6
vector nodes   119
VERIFY command   86
vertical position   20
vertical tab   15
video switch   22
virtual terminal   22
volleyball players   125
VRN device   8
VT   43
VT key   15
Wait (in TIME command)   52
WAIT switch in COPY   112
WAITS ASCII   15, 172
WARN switch in SPOOL   115
WHEN command   85
WHERE command   12, 85
WHERE switch in MAIL   128
WHO (in TTY command)   45
WHO (LOGIN option)   55
WHO command   7, 12, 72
wholine   19, 45, 55
WIDTH (in TTY command)   45
WIDTH (LOGIN option)   55
wizards   45
word delete (non-display escape)   44
WORDS switch in COPY   112
WRAPAROUND switch in XSPOOL   119
WRITER switch in COPY   112
XDIGEST (LOGIN option)   55
Xerox Graphics Printer   see XGP
XFACT.TXT file   115
XGP   8, 58, 86, 115, 119, 168
XGP switch in XSPOOL   119
XGPLIST command   58, 113
XHEADB switch in MAIL   128
XLINE switch in XSPOOL   119
XMAIL (LOGIN option)   55
XP (in wholine)   19
XPART   119
XSPOOL command   58, 115, 119
XTIME   19, 45
XTIME (in wholine)   19
YESMAIL switch in MAIL   128
ZERO command   71
↑← . (non-display escape)   44
↑← C (non-display escape)   44
↑← D (non-display escape)   44
↑← F (non-display escape)   44
↑← H (non-display escape)   44
↑← I (non-display escape)   44
↑← L (non-display escape)   44
↑← M (non-display escape)   44
↑← N (non-display escape)   44
↑← n CR (non-display escape)   44
↑← n V (non-display escape)   44
↑← R (non-display escape)   44
↑← W (non-display escape)   44
↑← X (non-display escape)   44
↑← Z (non-display escape)   44
↑← ↑W (non-display escape)   44
↑-char (control character)   see CTRL (control) key